OkHttp框架的一个Http500问题解决

一、问题描述:

使用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();

}

你可能感兴趣的:(OkHttp框架的一个Http500问题解决)