import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.FormBody;
import okhttp3.FormBody.Builder;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
public class PageLoginer {
// 用 CookieJar 实现 cookie 的存储,便于登录后请求其它 URL 可以复用
private static final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put("mtime.com", cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get("mtime.com");
return cookies != null ? cookies : new ArrayList<>();
}
})
.build();
/**
* 向指定的 URL 提交数据,并返回提交后的结果
*/
public String postContent(String url, Map<String, String> formData) {
//post方式提交的数据
Builder builder = new FormBody.Builder();
// 放入表单数据
for (String key : formData.keySet()) {
builder.add(key, formData.get(key));
}
// 构建 FormBody 对象
FormBody formBody = builder.build();
// 指定 post 方式提交FormBody
Request request = new Request.Builder()
.url(url)
.post(formBody)
.addHeader("User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36")
.addHeader("Referer",
"http://www.mtime.com/")
.addHeader("Host", "front-gateway.mtime.com")
.build();
return doExcute(request);
}
/**
* 根据输入的url,读取页面内容并返回
*/
public String getContent(String url) {
// 定义一个request
Request request = new Request.Builder()
.url(url)
.addHeader("User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36")
.addHeader("Referer",
"http://www.mtime.com/")
// .addHeader("Host", "front-gateway.mtime.com")
.build();
return doExcute(request);
}
private String doExcute(Request request) {
// 返回结果字符串
String result = null;
try {
result = okHttpClient.newCall(request).execute().body().string();
} catch (IOException e) {
// 抓取异常
System.out.println("request " + request.url() + " error . ");
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
PageLoginer asker = new PageLoginer();
// 完成登录
String url = "https://front-gateway.mtime.com/user/user/login.api";
// 登录表单数据
Map<String, String> formData = new HashMap();
formData.put("name", "");
formData.put("password", "");
String content = asker.postContent(url, formData);
System.out.println("login result:");
System.out.println(content);
// 请求个人设置页面
String myUrl = "http://my.mtime.com/personal/personInfo";
String content1 = asker.getContent(myUrl);
System.out.println(content1);
}
}