Выход из амперсандов в URL для запросов HttpClient - PullRequest
5 голосов
/ 01 апреля 2010

Итак, у меня есть некоторый Java-код, который использует Jakarta 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 и т. Д., Поэтому необходимо избегать всего остального.

Ответы [ 3 ]

14 голосов
/ 01 апреля 2010

Вот, пожалуйста:

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 для получения дополнительной информации.

1 голос
/ 01 апреля 2010

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

0 голосов
/ 01 апреля 2010

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

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

...