如何将HTML作为GET-Request参数发送?

时间:2009-05-08 09:54:35

标签: java http encoding httpclient

我想用Apaches HttpClient发送带有这样的GET请求的html字符串:

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失败。如果我用“test ..”替换"<html>",它可以正常工作。

修改

编码后接缝成为URL长度的问题,服务器除了这么长的URls之外没有。将其作为POST发送可以解决问题。

3 个答案:

答案 0 :(得分:3)

首先尝试使用网址编码格式化您的html字符串。

String yourHtmlString = java.net.URLEncoder.encode("<html>....");
method.setQueryString(new NameValuePair[] {new NameValuePair("report", yourHtmlString)});

答案 1 :(得分:2)

我会使用base64编码,可能会在它之前进行某种压缩,具体取决于你给出的内容的长度:

RFC 2068声明: 服务器应该谨慎依赖于高于255字节的URI长度,因为某些较旧的客户端或代理实现可能无法正确支持这些长度。 URL长度的规范并未规定最小或最大URL长度,但实现因浏览器而异。在Windows上:Opera支持~4050个字符,IE 4.0+支持2083个字符,Netscape 3 - &gt; 4.78在关机时出现错误之前支持最多8192个字符,Netscape 6在启动错误之前支持~2000。

答案 2 :(得分:1)

HTML字符串包含应进行URL编码的字符。阅读here

您可以使用UrlUtils.simpleFormUrlEncode

进行编码