okhttp: IllegalArgumentException: неожиданный символ 0xea - PullRequest
1 голос
/ 31 марта 2020

Я отправляю латинский символ в виде заголовка HTTP из моего android кода, используя okhttp

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

Но я получаю IllegalArgumentException: Unexpected char 0xea при 1

Я могу отправить тот же заголовок от Почтальона или используя HttpsURLConnection. Кроме того, этот символ является исключительным форматом заголовка согласно HTTP1.1 документации .

Итак, почему okHttp не поддерживает следующий символ? Кроме того, есть ли способ обойти это без изменения кода на стороне сервера, выполнив кодирование и декодирование Base64.

Я использую okttp версии 4.4.0. Кроме того, я уже прошел через https://github.com/square/okhttp/issues/2016, прежде чем кто-либо повторил то же самое.

1 Ответ

1 голос
/ 31 марта 2020

Для тех, кто ищет ответ, я нашел ответ.

Мы можем использовать addUnsafeNonAscii для решения этой проблемы.

Ниже приведен простой фрагмент кода

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

Делая это, мы можем избежать изменений на стороне сервера, хотя в долгосрочной перспективе предлагается использовать кодировку Base64 на стороне клиента и декодировать ее на стороне сервера.

...