返回顶部
首页 > 资讯 > 精选 >详解okhttp3 请求头不能为中文的坑
  • 359
分享到

详解okhttp3 请求头不能为中文的坑

okhttp3请求头的坑 2023-05-30 20:05:15 359人浏览 泡泡鱼
摘要

对源码有一定的了解,以为基本可以驾驭了,谁知道,坑来了。问题描述:上线接口的某一天,有用户报障,说登录不上,而且陆续有报障。通过log 发现登录不上,都有一个类似的报错:“java.lang.IllegalArgumentException

源码有一定的了解,以为基本可以驾驭了,谁知道,坑来了。

问题描述:

上线接口的某一天,有用户报障,说登录不上,而且陆续有报障。

通过log 发现登录不上,都有一个类似的报错:
“java.lang.IllegalArgumentException: Unexpected char 0x514d at 4 in wifiSsid value: "360免费WiFi-DP" at ”

什么?怎么和wifiSsid有关系了?后来查了一下代码,发现确实在登录接口上通过请求头的形式上传了 wifissid, 也就是连接的wifi的名字。Exception描述是第四个 char ,也就是“免”字?难道是因为中文的原因?当时是这么猜测的。

源码查询

猜测并不能作为判断的标准,然后做了一下测试,果然连接含义中文名字的wifi就有问题,也就是不能添加中文到请求头里面。这是为什么呢?最后还是通过源码进行的求证:

在okHttp的源码Header.java,发现set 和add header, 都会有这个判断:

  private void checkNameAndValue(String name, String value) {   if (name == null) throw new NullPointerException("name == null");   if (name.isEmpty()) throw new IllegalArgumentException("name is empty");   for (int i = 0, length = name.length(); i < length; i++) {    char c = name.charAt(i);    if (c <= '\u0020' || c >= '\u007f') {     throw new IllegalArgumentException(Util.fORMat(       "Unexpected char %#04x at %d in header name: %s", (int) c, i, name));    }   }   if (value == null) throw new NullPointerException("value == null");   for (int i = 0, length = value.length(); i < length; i++) {    char c = value.charAt(i);    if ((c <= '\u001f' && c != '\t') || c >= '\u007f') {     throw new IllegalArgumentException(Util.format(       "Unexpected char %#04x at %d in %s value: %s", (int) c, i, name, value));    }   }  }

--结束END--

本文标题: 详解okhttp3 请求头不能为中文的坑

本文链接: https://lsjlt.com/news/221245.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作