java okhttp3 的使用方法

java okhttp3 的使用方法java okhttp3 的使用方法
2025年03月13日 04:26
有1个网友回答
网友(1):

代码如下:

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, Map postData, String charset) {

FormBody.Builder formBodyBuilder = new FormBody.Builder();

for (Map.Entry entry : 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 List loadForRequest(HttpUrl url) {

List cookies = cookieContainer.get(url.host());

return cookies != null ? cookies : new ArrayList();
}

@Override
public void saveFromResponse(HttpUrl url, List cookies) {

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(List cookies) {

System.out.println("-------cookies-------------------------------------------------------------------");

for (Cookie cookie : cookies) {
System.out.println(cookie);
}

System.out.println("---------------------------------------------------------------------------------");
}
}