发送get请求
public static String get(OkHttpClient client, String url) {
if (url.equals("https")) client = getUnsafeOkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Response response = null;
try {
logger.info(String.format("发送get请求, 请求的url为[%s]", url));
response = client.newCall(request).execute();
String respStr = response.body().string();
return respStr;
} catch (Exception e) {
String.format("发送get请求出现异常!请求的url为[%s], 异常信息为: %s", url, ThrowableUtil.getErrorTrace(e));
}
return null;
}
post请求
public static String postForm(OkHttpClient client, String url, Map<String, String> params) {
FormBody.Builder builder = new FormBody.Builder();
params.forEach((k, v) -> {
builder.add(k, v);
});
// 创建一个Headers.Builder来构建请求头
Headers.Builder headers = new Headers.Builder();
headers.add("Content-Type", "application/json"); // 添加一个Content-Type头
Request request = new Request.Builder()
.url(url)
.post(builder.build())
.headers(headers.build())
.build();
Response response = null;
try {
response = client.newCall(request).execute();
String respStr = response.body().string();
return respStr;
} catch (Exception e) {
String.format(String.format("发送post请求出现异常!请求的url为[%s], 发送的数据为[%s], 异常信息为: %s", url, params.toString(), ThrowableUtil.getErrorTrace(e)));
}
return null;
}
跳过证书认证
ublic static OkHttpClient getUnsafeOkHttpClient() {
try {
// 创建一个信任所有证书的TrustManager
final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}
};
// 初始化SSLContext并设置TrustManager
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new SecureRandom());
// 创建一个SSLSocketFactory
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
// 配置OkHttpClient使用自定义的SSLSocketFactory
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0])
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true; // 不验证主机名
}
})
.build();
return okHttpClient;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
使用时直接调用
OkHttpClient client = OkHttpUtils.getUnsafeOkHttpClient();
注意HostnameVerifier和X509TrustManager都配置为信任所有内容,这会导致安全性降低,容易受到中间人攻击,请谨慎使用