Как отправить HTML как параметр GET-Request? - PullRequest
1 голос
/ 08 мая 2009

Я хотел бы отправить HTML-строку с GET-запросом, подобным этому, с помощью Apaches HttpClient:

http://sample.com/?html=<html><head>...

В данный момент это не работает, я думаю, это проблема кодирования. У вас есть идеи, как это сделать?

method.setQueryString(new NameValuePair[] {new NameValuePair("report", "<html>....")});
client.executeMethod(method)

Это не с org.apache.commons.httpclient.NoHttpResponseException: The server localhost failed to respond. Если я заменю "<html>" на "test ..", он будет работать нормально.

EDIT

Похоже, что проблема с длиной URL-адреса после кодирования не поддерживается сервером, за исключением таких длинных URls. Отправка его как POST решает проблему.

Ответы [ 3 ]

3 голосов
/ 08 мая 2009

Попробуйте сначала использовать форматирование URL, чтобы сначала отформатировать HTML-строку.

String yourHtmlString = java.net.URLEncoder.encode("<html>....");
method.setQueryString(new NameValuePair[] {new NameValuePair("report", yourHtmlString)});
2 голосов
/ 08 мая 2009

Я бы использовал кодировку base64 и, возможно, какое-то сжатие перед этим, в зависимости от длины вашего контента:

RFC 2068 заявляет: Серверы должны быть осторожны в зависимости от длины URI выше 255 байт, поскольку некоторые старые реализации клиента или прокси-сервера могут не поддерживать эти длины должным образом. Спецификация для длины URL не определяет минимальную или максимальную длину URL, но реализация зависит от браузера. В Windows: Opera поддерживает ~ 4050 символов, IE 4.0+ поддерживает ровно 2083 символа, Netscape 3 -> 4.78 поддерживает до 8192 символов, прежде чем вызывать ошибки при завершении работы, а Netscape 6 поддерживает ~ 2000, прежде чем вызывать ошибки при запуске.

1 голос
/ 08 мая 2009

HTML-строки содержат символы, которые должны быть закодированы в URL. Читайте здесь .

Вы можете выполнить кодирование с помощью UrlUtils.simpleFormUrlEncode

...