通过GLideModule 拦截client 在内部添加拦截器 下面是日志
以下是日志信息 日志有文本 可以看看我标识的
<-- 200 OK https://api.sunofbeaches.com/uc/ut/captcha?code=1641280445159 (132ms) // 获取验证码
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Server: nginx/1.21.4
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Date: Tue, 04 Jan 2022 07:15:00 GMT
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Content-Type: image/gif
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Transfer-Encoding: chunked
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Connection: keep-alive
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Pragma: No-cache
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Cache-Control: no-cache
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Expires: Thu, 01 Jan 1970 00:00:00 GMT
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: l_c_i: 927943204983013376
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Access-Control-Expose-Headers: l_c_i
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Access-Control-Allow-Headers: l_c_i
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: X-Content-Type-Options: nosniff
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: X-XSS-Protection: 1; mode=block
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: X-Frame-Options: DENY
01-04 15:14:05.435 15196-15225/com.lcq.st.sugarapp I/okhttp.OkHttpClient: <-- END HTTP (binary 3161-byte body omitted)
01-04 15:14:10.078 896-15252/? D/com.netease.nemu_vapi_android.thread.HttpServer: http server response data: {"errcode":0,"message":"OK","return":{"volume":0}}
01-04 15:14:18.849 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: --> POST https://api.sunofbeaches.com/uc/user/login/9tykg
01-04 15:14:18.849 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Content-Type: application/json; charset=UTF-8
01-04 15:14:18.849 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Content-Length: 72
01-04 15:14:18.849 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: l_c_i: 927943204983013376 // 获取的值
01-04 15:14:18.849 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: {"password":"8fb4158cbc09d35553039aaae2d8c605","phoneNum":"13602873056"}
01-04 15:14:18.849 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: --> END POST (72-byte body)
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: <-- 200 OK https://api.sunofbeaches.com/uc/user/login/9tykg (242ms)
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Server: nginx/1.21.4
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Date: Tue, 04 Jan 2022 07:15:14 GMT
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Content-Type: application/json;charset=UTF-8
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Transfer-Encoding: chunked
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Connection: keep-alive
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: sob_token: a_c07b72a7284e97561ba326d37529eb21
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Access-Control-Expose-Headers: sob_token
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Access-Control-Expose-Headers: l_c_i
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Access-Control-Allow-Headers: sob_token
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Access-Control-Allow-Headers: l_c_i
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: l_c_i:
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: X-Content-Type-Options: nosniff
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: X-XSS-Protection: 1; mode=block
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Cache-Control: no-cache, no-store, max-age=0, must-revalidate
01-04 15:14:19.091 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Pragma: no-cache
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Expires: 0
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: X-Frame-Options: DENY
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: {"success":true,"code":10000,"message":"登录成功","data":null} // 第一次显示成功 ————————————————————————————————
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: <-- END HTTP (66-byte body)
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp D/Sugar APP: getClient sob_token is = a_c07b72a7284e97561ba326d37529eb21
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: --> POST https://api.sunofbeaches.com/uc/user/login/9tykg
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Content-Type: application/json; charset=UTF-8
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Content-Length: 72
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: l_c_i: 927943204983013376
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: {"password":"8fb4158cbc09d35553039aaae2d8c605","phoneNum":"13602873056"}
01-04 15:14:19.092 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: --> END POST (72-byte body)
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: <-- 200 OK https://api.sunofbeaches.com/uc/user/login/9tykg (122ms)
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Server: nginx/1.21.4
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Date: Tue, 04 Jan 2022 07:15:14 GMT
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Content-Type: application/json;charset=UTF-8
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Transfer-Encoding: chunked
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Connection: keep-alive
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: X-Content-Type-Options: nosniff
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: X-XSS-Protection: 1; mode=block
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Cache-Control: no-cache, no-store, max-age=0, must-revalidate
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Pragma: no-cache
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: Expires: 0
01-04 15:14:19.215 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: X-Frame-Options: DENY
01-04 15:14:19.216 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: {"success":false,"code":11111,"message":"人类验证码不正确","data":null} // 第二次验证码错误 ——————————————————————————————
01-04 15:14:19.216 15196-15244/com.lcq.st.sugarapp I/okhttp.OkHttpClient: <-- END HTTP (79-byte body)
01-04 15:14:19.224 15196-15196/com.lcq.st.sugarapp E/-->: sobuser = SobUser{success=false, code=11111, message='人类验证码不正确', data=null} // 最后我这边打印报错信息
假设把拦截器部分注释 登录就正常 不过我的lci得通过日志获取 这部分有点不太理解 为啥加了拦截器就出错了
拦截器部分
public static OkHttpClient getClient() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
builder.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
builder.writeTimeout(DEFAULT_UPLOAD_TIMEOUT, TimeUnit.SECONDS);
// 添加拦截器 +header
builder.addInterceptor(new Interceptor() {
@NotNull
@Override
public Response intercept(@NotNull Chain chain) throws IOException {
Request original = chain.request();
Request.Builder builder1 = original.newBuilder();
Response response = chain.proceed(original);
Headers headers = response.headers();
String l_c_i = headers.get("l_c_i");
String sob_token = headers.get("sob_token");
if(AllUtils.isStrNoEmpty(l_c_i)){
SpUtils.getInstance().putString(Constance.TUL_TOKEN,l_c_i);
SLog.d("getClient l_c_i is = "+l_c_i);
}
if(AllUtils.isStrNoEmpty(sob_token)){
SLog.d("getClient sob_token is = "+sob_token);
}
Request request = builder1.build();
return chain.proceed(original); // 如果此处用request 的话 日志两次都是显示验证码失败
}
});
// cookie保存
/*cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(SugarApplication.getContext()));
SLog.d("cookieJar "+ cookieJar.toString());
builder.cookieJar(cookieJar);*/
if (BuildConfig.DEBUG) {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(httpLoggingInterceptor);
}
return builder.build();
}
还有是不是可以不需要cookie了呢 以后都是拿token值去对比么
1、获取验证码(会返回验证码的 key,就是 l_c_i 的值)
2、登录账号(在请求头的 header 中携带验证码的 key,请求后会有响应头,取到 sob_token)
3、调用需要登录的接口的时候,请求头中携带上 sob_token
看断点的代码吧,他有写demo的。就一个点,在resquest上的header上要携带,监听response的header有就更新。图片的话就看你获取到的是啥,提交时的是啥,另外就是你验证码真的对了,哈哈。