Выход из амперсандов в URL для запросов HttpClient

Таким образом, у меня есть некоторый код Java, который использует Джакартский HttpClient как это:

URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());

Проблема - это если title включает любые амперсанды (и), их считают разделителями параметра, и запрос идет странный... и если я заменяю их ОСТАВЛЕННЫМ ИЗ URL эквивалентом %26, затем это дважды оставлено getEscapedPathQuery () в %2526.

Я в настоящее время работаю вокруг этого, в основном возмещая убытки позже:

URI aURI = new URI( "http://host/index.php?title=" + title.replace("&", "%26") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery().replace("%2526", "%26"));

Но должен быть более хороший способ сделать это, правильно? Обратите внимание, что заголовок может содержать любое количество непредсказуемых символов UTF-8 и т.д., так выход, все остальное - требование.

5
задан skaffman 18 May 2012 в 18:12
поделиться

3 ответа

Вот так:

import java.net.URLEncoder;
...
...
URI aURI = new URI( "http://host/index.php?title=" + URLEncoder.encode(title,"UTF-8") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getPathQuery());

Проверьте java.net.URLEncoder для получения дополнительной информации.

14
ответ дан 18 December 2019 в 11:55
поделиться

Используйте класс URLEncoder .

Служебный класс для кодирования HTML-форм. Этот класс содержит статические методы для преобразования строки в формат MIME application / x-www-form-urlencoded. Дополнительную информацию о кодировке HTML-форм см. В спецификации HTML.

0
ответ дан 18 December 2019 в 11:55
поделиться

Почему вы вызываете getEscapedPathQuery (), если не хотите экранирования? Просто решите, кто за это отвечает, и будьте последовательны.

1
ответ дан 18 December 2019 в 11:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: