HTTPClient和PostMethod

时间:2014-10-29 09:33:09

标签: java apache-commons-httpclient

所以我遇到了一个问题,服务支持人员让我用HTML支持他们。 所以我需要获得由

生成的等效HTML
HttpClient client = new HttpClient();
PostMethod post = new PostMethod( "https://www.url.to/post-to" );
NameValuePair[] params = {
                new NameValuePair( "NAME", name ),
                new NameValuePair( "EMAIL", email ),
for( NameValuePair param : params ){
   post.setParameter(param.getName(), param.getValue());
}

是否可以将其作为HTML获取或将请求作为字符串发送,包含所有标题等?

2 个答案:

答案 0 :(得分:1)

如果您使用某些日志记录框架,可以将Apache HttpClient配置为记录通过它的请求和响应,请参阅Wire logging。从文档来看,如果正确设置了日志框架,这应该足以启用它

System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");

System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");

System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");

System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "debug");

编辑

如果使用Apache Commons Logging作为日志框架,这些设置就可以了。上述链接还包含为log4jjava.util.logging设置此内容的示例。

答案 1 :(得分:0)

您可以编写一个等效的HTML表单,将相同的两个参数发送到同一个URL。

但是,如果您为此连接导致的问题打开支持服务单,则HTML可能不会非常有用,因为浏览器可能会向URL发送不同的标头,即使请求正文是相同。

您可以使用postpost.getRequestHeaders()变量中获取请求标头。它返回一个类型为Header[]的数组,您必须将其转换为字符串。通过urlencoding值,可以很容易地从参数重建消息体。正文始终采用NAME=urlencodedname&EMAIL=urlencodedemail形式。