Проблема с отображением заголовков запросов с помощью Apache httpclient 4 - PullRequest
3 голосов
/ 16 августа 2010

Я пытался получить заголовки, отправленные HttpMethod, используя 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: 

[..]

Ака заголовки ответа хороши, но не запроса. (Тот же результат, если я перемещу блок заголовков запросов журнала перед оператором execute).

(и НЕТ, я просто не хочу их видеть, поэтому установка уровня отладки для журнала неприемлема)

Кто-нибудь может помочь?

Ответы [ 3 ]

8 голосов
/ 09 апреля 2014

Чтобы получить все заголовки, включая те, которые устанавливает HTTPclient, используйте
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());
}
4 голосов
/ 02 августа 2013

С 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)
***********************

Может ли это помочь тем, кто путешествует здесь.

2 голосов
/ 16 августа 2010

Он будет отображать только те заголовки запроса, которые вы установили самостоятельно.

Если вы хотите регистрировать заголовки запросов, которые установил HttpClient, вам необходимо настроить встроенную регистрацию HttpClient с помощью Commons Logging . Также см. этот документ .

В качестве альтернативы вы также можете использовать внешний инструмент, такой как Fiddler .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...