OkHttp3 java.lang.IllegalArgumentException: 意外的字符 0x2019
OkHttp3 java.lang.IllegalArgumentException: Unexpected char 0x2019
为什么 OKHttp 禁止某些可打印字符作为 header 发送?我正在编写一个发布 http header 的应用程序。应用程序崩溃,因为 a right single quoted character。
这是堆栈跟踪:
Fatal Exception: java.lang.IllegalArgumentException: Unexpected char 0x2019 at 358 in my-header value: test’s
at okhttp3.Headers.checkValue(Headers.java:272)
at okhttp3.Headers$Builder.add(Headers.java:312)
at okhttp3.Request$Builder.addHeader(Request.java:196)
...
这是抛出异常的OkHttp source code:
internal fun checkValue(value: String, name: String) {
for (i in 0 until value.length) {
val c = value[i]
require(c == '\t' || c in '\u0020'..'\u007e') {
format("Unexpected char %#04x at %d in %s value: %s", c.toInt(), i, name, value)
}
}
}
看到那个源代码,是不是一个标准只允许这个范围内的字符 require(c == '\t' || c in '\u0020'..'\u007e')
用于 http header?
请检查this。
由于 Okhttp
中存在 checkValue
方法,您的 header 不能包含无效数据。
因此您需要对 my-header
的值进行编码。
这是正确的方法:
https://square.github.io/okhttp/4.x/okhttp/okhttp3/-headers/-builder/add-unsafe-non-ascii/
使用 Headers.Builder 方法:addUnsafeNonAscii(String key,String value)
为什么 OKHttp 禁止某些可打印字符作为 header 发送?我正在编写一个发布 http header 的应用程序。应用程序崩溃,因为 a right single quoted character。
这是堆栈跟踪:
Fatal Exception: java.lang.IllegalArgumentException: Unexpected char 0x2019 at 358 in my-header value: test’s
at okhttp3.Headers.checkValue(Headers.java:272)
at okhttp3.Headers$Builder.add(Headers.java:312)
at okhttp3.Request$Builder.addHeader(Request.java:196)
...
这是抛出异常的OkHttp source code:
internal fun checkValue(value: String, name: String) {
for (i in 0 until value.length) {
val c = value[i]
require(c == '\t' || c in '\u0020'..'\u007e') {
format("Unexpected char %#04x at %d in %s value: %s", c.toInt(), i, name, value)
}
}
}
看到那个源代码,是不是一个标准只允许这个范围内的字符 require(c == '\t' || c in '\u0020'..'\u007e')
用于 http header?
请检查this。
由于 Okhttp
中存在 checkValue
方法,您的 header 不能包含无效数据。
因此您需要对 my-header
的值进行编码。
这是正确的方法: https://square.github.io/okhttp/4.x/okhttp/okhttp3/-headers/-builder/add-unsafe-non-ascii/ 使用 Headers.Builder 方法:addUnsafeNonAscii(String key,String value)