How can I display all the HTTP Headers when using the DefaultHTTPClient?

ぐ巨炮叔叔 提交于 2019-12-18 12:35:29

问题


When using the DefaultHttpClient() from the Apache Commons HTTP Client, is it possible to show the full request in the console output for debugging purposes?

I'm having issues with my application and I feel that the easiest way to debug it it would be to inspect all data sent by the DefaultHTTPClient.


回答1:


You can get all headers like this:

Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
  String headerName = (String)headerNames.nextElement();
  out.println("" + headerName);
  out.println("" + request.getHeader(headerName));
}

See this tutorial for more info.




回答2:


From another answer on StackOverflow. This can easily be done by enabling the debug logging for the Apache HTTP Client:

java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);

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.http", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "debug");



回答3:


Yes, here's sample code:

    import java.util.Arrays;
    import org.apache.http.Header;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    ...
    HttpResponse response;
    ...
    HttpGet httpGet = new HttpGet(serviceURL);
    response = httpclient.execute(httpGet);
    ...
    // Print all headers
    List<Header> httpHeaders = Arrays.asList(response.getAllHeaders());        
    for (Header header : httpHeaders) {
        System.out.println("Headers.. name,value:"+header.getName() + "," + header.getValue());
    }



回答4:


When you execute the request you are passing somewhere HttpRequest object. It has method getAllHeaders()




回答5:


If you are using Logback as your logging framework, add the following configuration to your logback.xml / logback-test.xml file:

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true">

    <!-- more config -->

    <logger name="org.apache.http" level="DEBUG"/>

    <!-- more config -->

</configuration>

Having added this configuration, Logback's log appenders will now show useful HttpClient-related information about HTTP request and response headers, among other things.



来源:https://stackoverflow.com/questions/12364555/how-can-i-display-all-the-http-headers-when-using-the-defaulthttpclient

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!