Apache HttpGet проблема кодирования URL (знак плюс, +) - PullRequest
2 голосов
/ 06 сентября 2011

Я отправляю запрос GET с помощью HttpClient, но + не кодируется.


1. Если я передам строку параметра query в незашифрованном виде, как это

URI uri = new URI(scheme, host, path, query, null);
HttpGet get = new HttpGet(uri);

Тогда знак + не кодируется и принимается как пробел на сервере. Остальная часть URL кодируется нормально.

2.Если я закодирую параметры в строке query следующим образом

param = URLEncoder.encode(param,"UTF-8");

Затем я получаю кучу странных символов на сервере, возможно, потому что URL был закодирован дважды.

3.Если я только заменю + на %B2 вот так

query = query.replaceAll("\\+","%B2");

Затем %B2 кодируется, когда GET выполняется HttpClient


Как правильно кодировать параметры Get с помощью Apache HttpClient и убедиться, что + также закодировано?

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

Хорошо, решение состояло в том, что вместо создания URI, подобного этому

URI uri = new URI(scheme, host, path, query, null);

Нужно создать это так

URIUtils.createURI(scheme, host, -1, path, query, null);

Назначение класса URIUtils:

Набор утилит для URI, для устранения ошибок в класс

без комментариев ........

0 голосов
/ 06 сентября 2011

Когда вы строите строку query, используйте URLEncoder.encode(paramValue, "UTF-8") для каждого значения параметра.Затем при отправке запроса используйте URLDecoder.decode(paramValue, "UTF-8"), и «странные символы» будут декодированы.

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