代码如下:
import java.io.IOException;
import java.net.SocketTimeoutException;
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.Headers;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.OkHttpClient.Builder;
public class HttpLib {
public static boolean debug = false;
private final static String UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36";
private Map> cookieContainer = new HashMap >();
private boolean enableCookie = false;
public boolean isEnableCookie() {
return enableCookie;
}
public void setEnableCookie(boolean enableCookie) {
this.enableCookie = enableCookie;
}
public String get(String url) throws SocketTimeoutException {
return get(url, null);
}
public String get(String url, String charset) throws SocketTimeoutException {
OkHttpClient client = buildOkHttpClient();
Request request = createRequestBuilder(url).build();
try {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
if (debug) {
dumpHeaders(response);
}
if (charset != null && !charset.equals("")) {
return new String(response.body().bytes(), charset);
}
return response.body().string();
}
} catch (SocketTimeoutException e) {
throw e;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public String tryGet(String url, int tryTimes) {
String html = null;
boolean done = false;
int count = 0;
while (!done && count < tryTimes) {
try {
html = get(url);
done = true;
} catch (SocketTimeoutException e) {
System.out.println("获取链接[" + url + "]内容超时,正在尝试第" + (++count) + "次获取......");
}
}
return html;
}
public String post(String url, MappostData, String charset) {
FormBody.Builder formBodyBuilder = new FormBody.Builder();
for (Map.Entryentry : postData.entrySet()) {
formBodyBuilder.add(entry.getKey(), entry.getValue());
}
RequestBody requestBody = formBodyBuilder.build();
return post(url, requestBody, charset);
}
public String post(String url, MediaType contentType, String content, String charset) {
return post(url, FormBody.create(contentType, content), charset);
}
public String post(String url, RequestBody requestBody, String charset) {
OkHttpClient client = buildOkHttpClient();
Request.Builder requestBuilder = createRequestBuilder(url);
Request request = requestBuilder.post(requestBody).build();
try {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
if (charset != null && !charset.equals("")) {
return new String(response.body().bytes(), charset);
}
return response.body().string();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private OkHttpClient buildOkHttpClient() {
Builder builder = new OkHttpClient.Builder();
if (enableCookie) {
builder.cookieJar(new CookieJar() {
@Override
public ListloadForRequest(HttpUrl url) {
Listcookies = cookieContainer.get(url.host());
return cookies != null ? cookies : new ArrayList();
}
@Override
public void saveFromResponse(HttpUrl url, Listcookies) {
if (debug) {
dumpCookies(cookies);
}
cookieContainer.put(url.host(), cookies);
}
});
}
return builder.build();
}
private Request.Builder createRequestBuilder(String url) {
Request.Builder builder = new Request.Builder().url(url);
builder.addHeader("User-Agent", UserAgent);
return builder;
}
private void dumpHeaders(Response response) {
System.out.println("----------Headers----------------------------------------------------------");
Headers headers = response.headers();
for (String name : headers.names()) {
System.out.println(name);
}
System.out.println("---------------------------------------------------------------------------");
}
private void dumpCookies(Listcookies) {
System.out.println("-------cookies-------------------------------------------------------------------");
for (Cookie cookie : cookies) {
System.out.println(cookie);
}
System.out.println("---------------------------------------------------------------------------------");
}
}