OKHttp3实例+代码抓包工具的使用
implementation "com.squareup.okhttp3:okhttp:3.14.9"
implementation "com.squareup.okhttp3:logging-interceptor:3.14.9"
debugImplementation 'com.readystatesoftware.chuck:library:1.1.0'
releaseImplementation 'com.readystatesoftware.chuck:library-no-op:1.1.0'

package com.example.networktestdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.readystatesoftware.chuck.ChuckInterceptor;
import java.io.IOException;
import java.lang.reflect.Field;
import java.net.Proxy;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client = getOkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType,
"{\n "xxxx":"xxxxx",\n "appKey":"nbdz",\n "xxx":xxxxx,\n "xxx":xxx,\n "xxx":"xxx",\n "xxx":"1.0"\n}");
Request request = new Request.Builder()
.url("https://xxxxxxx")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.build();
try {
Response response = client.newCall(request).execute();
runOnUiThread(() -> {
Log.d("response:", response.toString());
});
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
}
public OkHttpClient getOkHttpClient() {
List<Interceptor> interceptors = new ArrayList<>();
Interceptor interceptorHeader = chain -> {
Request original = chain.request();
Request request = original.newBuilder()
.header("Content-Type", "application/json")
.method(original.method(), original.body())
.build();
return chain.proceed(request);
};
interceptors.add(interceptorHeader);
interceptors.add(new ChuckInterceptor(this));
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.connectTimeout(10L, TimeUnit.SECONDS)
.writeTimeout(10L, TimeUnit.SECONDS)
.readTimeout(10L, TimeUnit.SECONDS)
.addInterceptor(chain -> {
Request original = chain.request();
Request request = original.newBuilder()
.header("Content-Type", "application/json")
.method(original.method(), original.body())
.build();
return chain.proceed(request);
})
.retryOnConnectionFailure(false);
for (Interceptor interceptor : interceptors) {
if (interceptor != null) {
builder.addInterceptor(interceptor);
}
}
boolean isDebug = true;
if (isDebug) {
builder.addInterceptor(sLoggingInterceptor);
} else {
builder.proxy(Proxy.NO_PROXY);
}
OkHttpClient client = builder.build();
boolean isIgnoreSSLVerifier = true;
if (isIgnoreSSLVerifier) {
ignoreSSLVerifier(client);
}
return client;
}
protected static HttpLoggingInterceptor sLoggingInterceptor =
new HttpLoggingInterceptor(message -> {
}).setLevel(HttpLoggingInterceptor.Level.BODY);
protected void ignoreSSLVerifier(OkHttpClient okHttpClient) {
OkHttpClient sClient = okHttpClient;
SSLContext sc = null;
try {
sc = SSLContext.getInstance("SSL");
sc.init((KeyManager[]) null, new TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}}, new SecureRandom());
} catch (Exception var10) {
}
HostnameVerifier hv1 = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
String workerClassName = "okhttp3.OkHttpClient";
try {
Class workerClass = Class.forName(workerClassName);
Field hostnameVerifier = workerClass.getDeclaredField("hostnameVerifier");
hostnameVerifier.setAccessible(true);
hostnameVerifier.set(sClient, hv1);
Field sslSocketFactory = workerClass.getDeclaredField("sslSocketFactory");
sslSocketFactory.setAccessible(true);
sslSocketFactory.set(sClient, sc.getSocketFactory());
} catch (Exception var9) {
}
}
}