OkHttp3 java.lang.IllegalArgumentException: неожиданный символ 0x2019

Почему 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?

Не могли бы вы показать весь свой my-header ?

Robbit 30.05.2019 04:37
2
1
4 055
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Пожалуйста, проверьте это.

Из-за наличия метода checkValue в Okhttp ваш заголовок не может содержать недопустимые данные.

Итак, вам нужно закодировать значение my-header.

это правильный путь: https://square.github.io/okhttp/4.x/okhttp/okhttp3/-headers/-builder/add-unsafe-non-ascii/ используйте метод Headers.Builder: addUnsafeNonAscii (строковый ключ, строковое значение)

как и где добавить этот объект заголовков?

Rahul Pawar 25.01.2022 07:58

Другие вопросы по теме