1

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

编辑

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

4

3 回答 3

3

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

String yourHtmlString = java.net.URLEncoder.encode("<html>....");
method.setQueryString(new NameValuePair[] {new NameValuePair("report", yourHtmlString)});
于 2009-05-08T09:57:45.110 回答
2

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

RFC 2068 规定:服务器应谨慎对待超过 255 字节的 URI 长度,因为一些较旧的客户端或代理实现可能无法正确支持这些长度。URL 长度规范没有规定最小或最大 URL 长度,但实现因浏览器而异。在 Windows 上:Opera 支持 ~4050 个字符,IE 4.0+ 正好支持 2083 个字符,Netscape 3 -> 4.78 在导致关闭错误之前最多支持 8192 个字符,而 Netscape 6 在导致启动错误之前支持 ~2000 个字符。

于 2009-05-08T10:03:23.770 回答
1

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

您可以使用UrlUtils.simpleFormUrlEncode进行编码

于 2009-05-08T10:01:10.403 回答