文章目录
一、引入依赖
Maven项目的 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
二、创建OkHttpClient实例使用
private static final OkHttpClient client = new OkHttpClient();
1.Get
代码如下(示例):
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
如果url有查询参数,可以构建url
HttpUrl.Builder urlBuilder = HttpUrl.parse(url)
.newBuilder();
urlBuilder.addQueryParameter("user","admin");
Request request = new Request.Builder()
.url(urlBuilder.build())
.build();
Response response = client.newCall(request).execute();
2.Post
2.1 json String
RequestBody body = RequestBody.create(MediaType.get("application/json"), json);
Request request = new Request.Builder()
.url(url)
.method("POST", body )
.build();
Response response = client.newCall(request).execute();
2.2 请求application/x-www-form-urlencoded
RequestBody requestBody = new FormBody.Builder()
.add("user",“admin”)
.add("password","123")
.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = client.newCall(request).execute();
2.3 上传文件
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/static/logo.png"));
MultipartBody multipartBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", “11.png”, fileBody)
.build();
Request uploadRequest = new Request.Builder()
.url(url)
.post(multipartBody)
.build();
Response response = client.newCall(request).execute();
三、cookie请求
request创建时可以通过header设置参数
Request request = new Request.Builder()
.url(url)
.header("Cookies", "xxx")
.build();
设置CookieJar对象管理Cookie
private static final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
private static final OkHttpClient client = new OkHttpClient.Builder().cookieJar(new CookieJar() {
@Override
public void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {
cookieStore.put(httpUrl.host(), list);
}
@Override
public List<Cookie> loadForRequest(HttpUrl httpUrl) {
List<Cookie> cookies = cookieStore.get(httpUrl.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
}).build();
四、忽略Https证书验证
public static OkHttpClient getUnsafeOkHttpClient() {
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
final javax.net.ssl.SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(sslSocketFactory,(X509TrustManager)trustAllCerts[0]);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
return builder.build();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

5034

被折叠的 条评论
为什么被折叠?



