Почему OKHttp запрещает отправку некоторых печатных символов в качестве заголовка? Я пишу приложения, которые публикуют заголовок http. Приложения аварийно завершают работу, потому что правый символ в одинарных кавычках.
Это трассировка стека:
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, который выдает исключение:
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?
Пожалуйста, проверьте это.
Из-за наличия метода checkValue
в Okhttp
ваш заголовок не может содержать недопустимые данные.
Итак, вам нужно закодировать значение my-header
.
это правильный путь: https://square.github.io/okhttp/4.x/okhttp/okhttp3/-headers/-builder/add-unsafe-non-ascii/ используйте метод Headers.Builder: addUnsafeNonAscii (строковый ключ, строковое значение)
как и где добавить этот объект заголовков?
Не могли бы вы показать весь свой
my-header
?