通过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; 你应该单独设置内容类型和编码