android - okhttp:IllegalArgumentException:意外的 char 0xea

标签 android http http-headers okhttp

我使用 okhttp 从我的 android 代码发送拉丁字符作为 HTTP header

Builder builder=new Builder();
builder.url(myURL);
builder.addHeader("Original-Filename", "tête-à-tête.pdf");

但是,我得到 IllegalArgumentException: Unexpected char 0xea at 1

我可以从 Postman 或使用 HttpsURLConnection 发送相同的 header 。此外,根据 HTTP1.1 documentation,该字符是一种异常(exception)的 header 格式。 .

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

我正在使用 okttp 版本 4.4.0。另外,我已经通过了https://github.com/square/okhttp/issues/2016在任何人重复同样的事情之前。

最佳答案

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

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

下面是它的简单代码 fragment

Headers headers = new Headers.Builder()
.addUnsafeNonAscii("Original-Filename", "tête-à-tête.pdf")
.build();

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

关于android - okhttp:IllegalArgumentException:意外的 char 0xea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60945415/

相关文章:

http - 从多部分表单上传 Content-Length header 获取文件大小

java - 如果 blob 超过 2MB,getBlob() 会崩溃,substr 方法不起作用

mysql - Angularjs http.get 方法在某些 Mac 上失败

android - Android 中状态更改时的按钮动画

node.js - Angular 4 HTTP GET 不包括 HTTP header 中用于授权的 JWT

java - 如何通过同一套接字连接发送图像和文本

android - $http 调用不适用于 Ionic Android 构建

php - 强制 Sony PRS-T1 的浏览器下载 .epub 文件

android - Unresolved 对 Koin 的 sharedViewModel() 的引用

android - 将主题应用到应用程序小部件