OkHttp框架的一個Http500問題解決

weixin_34232744發表於2018-08-28

一、問題描述:

使用OKHttp框架進行網路請求,測試線採用http,正式線採用https,測試線請求200通過,但是正式線卻發生500異常。

二、解決方法:

1、首先定位在https請求的問題

2、通常http500的問題定位請求頭的問題

3、檢查程式碼,發現OkHttp配置程式碼中並沒有配置請求頭

4、用fiddler抓包,檢視header,發現唯一不同的是User-Agent

5、採用https請求的時候OKHttp會配置一個預設的User-Agent[okhttp/3.9.0]

[21/Aug/2018:14:32:16 +0800] "POST /index/index HTTP/1.1" 500 186 "-" "okhttp/3.9.0"

6、替換正確的User-Agent,測試通過。

RequestBody body = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded; charset=UTF-8"), sb.toString());

request = request.newBuilder().post(body).removeHeader("User-Agent").addHeader("User-Agent",getUserAgent()).build();

[21/Aug/2018:14:40:13 +0800] "POST /index/getVersionInfo HTTP/1.1" 200 32 "-" "Dalvik/1.6.0 (Linux; U; Android 4.3; Lenovo A890e Build/JLS36C)"

private static String getUserAgent () {

String userAgent = "";

StringBuffer sb = new StringBuffer();

userAgent = System.getProperty("http.agent");//Dalvik/2.1.0 (Linux; U; Android 6.0.1; vivo X9L Build/MMB29M)

for (int i = 0, length = userAgent.length(); i < length; i++) {

char c = userAgent.charAt(i);

if (c <= '\u001f' || c >= '\u007f') {

sb.append(String.format("\\u%04x", (int) c)); } else { sb.append(c); }

}

LogUtils.tag("xxx").e("User-Agent","User-Agent: "+ sb.toString());

return sb.toString();

}

相關文章