okhttp: IllegalArgumentException: 意外的字符 0xea

Exc*_*ion 5 android http http-headers okhttp

我使用 okhttp 从我的 Android 代码发送拉丁字符作为 HTTP 标头

\n
Builder builder=new Builder();\nbuilder.url(myURL);\nbuilder.addHeader("Original-Filename", "t\xc3\xaate-\xc3\xa0-t\xc3\xaate.pdf");\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我越来越IllegalArgumentException: Unexpected char 0xea1

\n

我可以从 Postman 或使用HttpsURLConnection. 此外,根据HTTP1.1 文档,该字符是一种例外的标头格式,该字符是例外的标头格式。

\n

那么,为什么okHttp不支持以下字符呢?另外,是否有任何解决方法,无需通过执行 Base64 编码和解码来更改服务器端的代码。

\n

我使用的是 okttp 版本 4.4.0。另外,我已经浏览过https://github.com/square/okhttp/issues/2016另外,在有人重复同样的事情之前,

\n

Exc*_*ion 7

对于任何寻找答案的人来说,我找到了答案。

\n\n

我们可以使用addUnsafeNonAscii来解决这个问题。

\n\n

下面是它的简单代码片段

\n\n
Headers headers = new Headers.Builder()\n.addUnsafeNonAscii("Original-Filename", "t\xc3\xaate-\xc3\xa0-t\xc3\xaate.pdf")\n.build();\n
Run Code Online (Sandbox Code Playgroud)\n\n

通过这样做,我们可以避免服务器端的更改,尽管从长远来看,建议在客户端使用 Base64 编码并在服务器端进行解码。

\n