通过Apache HTTP客户端库获得Java HTTP请求
问题描述:
我正在使用Apache HTTP客户端库发送HTTP请求。我有以下问题:通过Apache HTTP客户端库获得Java HTTP请求
1-此库是否将任何默认标头附加到请求中,或者您必须自己附加所有标头。
HttpClient client = new HttpClient();;
HttGet request = new HttpGet('http://www.example.com');
//Now Can i execute the request directly or do i need to
//add headers before executing the request
client.execute(request);
2-我还希望看到正在发送到服务器的标头。我试过“request.getHeaders()”,但它只是打印 - “[Lorg.apache.http.Header; @ 1bc2616”。我如何获得它以名称 - 值格式打印标题。
答
你使用的是什么版本的Apache HttpClient?在版本4.0.1中有一个方法HttpGet#getAllHeaders(),它返回一个Header对象的数组。看到这里grep的代码 - http://grepcode.com/file/repo1.maven.org/maven2/org.apache.httpcomponents/httpcore/4.0.1/org/apache/http/message/AbstractHttpMessage.java#AbstractHttpMessage.getAllHeaders%28%29
我试图运行此代码:
final HttpClient client = new DefaultHttpClient();
final HttpGet get = new HttpGet("http://www.google.com");
client.execute(get);
for (final Header header : get.getAllHeaders()) {
System.out.println("Header: " + header.getName() + " = " + header.getValue());
}
System.out.println(get.getAllHeaders().length);
我没有看到任何头越来越印在控制台和get.getAllHeaders()返回长度为零(0)。所以我会假设HttpClient不提供任何默认的头文件。
答
我不会推荐使用单独的HttpGet/HttpPost/HttpPut 而是HttpRequest接口。你可以将Header/body设置为HttpEntity。 但默认标头已附加: 方法:默认情况下为GET/POST/PUT; 你应该单独设置内容类型和编码