OkHttp框架的一个Http500问题解决

作者: Kndroid | 来源:发表于2018-08-28 14:26 被阅读9次

    一、问题描述:

    使用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问题解决

        本文链接:https://www.haomeiwen.com/subject/mngfwftx.html