2010-08-15 40 views
2

我一直在试图获取由列举HTTPMethod发送的头,使用HttpClient的4,但没有任何成功...问题显示请求头与Apache HttpClient的4

这里是我的代码:

HttpClient httpClient = new DefaultHttpClient(); 
HttpParams httpParams = httpClient.getParams(); 
HttpGet httpGet = new HttpGet("http://www.google.fr"); 

HttpResponse response = httpClient.execute(httpGet); 

log.info("*** Request headers ***"); 
Header[] requestHeaders = httpGet.getAllHeaders(); 
for(Header header : requestHeaders) { 
    log.info(header.toString()); 
} 
log.info("***********************"); 


log.info("*** reponse ***"); 
log.info(response.getStatusLine()); 
Header[] headers = response.getAllHeaders(); 
for(Header header : headers) { 
    log.info(header.toString()); 
} 

但结果是:

00:27:57,368 INFO - *** Request headers *** 

00:27:57,368 INFO - *********************** 

00:27:57,368 INFO - *** reponse *** 

00:27:57,368 INFO - HTTP/1.1 200 OK 

00:27:57,368 INFO - Date: Sun, 15 Aug 2010 22:28:09 GMT 

00:27:57,368 INFO - Expires: -1 

00:27:57,368 INFO - Cache-Control: private, max-age=0 

00:27:57,368 INFO - Content-Type: text/html; charset=ISO-8859-1 

00:27:57,368 INFO - Set-Cookie: 

[..] 

阿卡响应报头是好的,但不是要求的。 (如果我在执行语句之前移动日志请求头块,结果相同)。

(不,我不想只看到他们,所以设置日志级别调试心不是可以接受的)

任何人都可以帮助吗?

回答

1

它只会显示您自己设置的请求标头。

如果你想记录HttpClient设置的请求头,那么你需要配置HttpClient的内置日志记录Commons Logging。另见this document

作为替代方案,您还可以使用外部工具,如Fiddler

+0

感谢您的回答,但我说更改日志级别不可接受:我需要存储发送的标头。您确定在执行请求之前甚至之后无法获取它们? – 2010-08-16 07:57:51

3

事情自2010年以来可能已经发生变化,但是这可以通过使用请求拦截器(用于检查较低级别的请求)和惊人相似的代码来完成。

// So we can get all the headers (not just the ones we explicitly set).   
httpClient.addRequestInterceptor(new HttpRequestInterceptor() { 

    public void process(
      final HttpRequest request, 
      final HttpContext context) 
      throws HttpException, IOException { 

     // Start Debug 
     System.out.println("*** Request headers ***"); 
     Header[] requestHeaders = request.getAllHeaders(); 
     for(Header header : requestHeaders) { 
      System.out.println(header.toString()); 
     } 
     System.out.println("***********************"); 
     // End Debug 
    } 

}); 

在我的情况下,我得到以下输出(只显式设置其中两个)。

*** Request headers *** 
Accept: application/xml 
Authorization: Basic bmV3Omd1ZXN0 
Content-Length: 772 
Content-Type: application/xml; charset=UTF-8 
Host: rest3api.sifassociation.org:80 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.2.1 (java 1.5) 
*********************** 

这可以帮助那些在这里旅行的人。

6

要获取所有标头,包括HTTP客户端设置的标头,请使用
HttpCoreContext。这个类允许读出所有标题。

HttpClient client = HttpClients.createDefault(); 
HttpCoreContext localContext = new HttpCoreContext(); 
HttpResponse response = client.execute(request,localContext); 

Header[] headers = localContext.getRequest().getAllHeaders(); 
for (Header header : headers) { 
    System.out.println(header.toString()); 
} 
+0

这应该是正确的答案 – Jansen 2016-10-30 14:21:57