使用DefaultHTTPClient时如何显示所有HTTP标头?

Mri*_*lla 6 java apache-httpclient-4.x

使用DefaultHttpClient()Apache Commons HTTP Client时,是否可以在控制台输出中显示完整请求以进行调试?

我的应用程序出现问题,我觉得最简单的调试方法是检查发送的所有数据DefaultHTTPClient.

MaV*_*SCy 15

你可以得到这样的所有标题:

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

有关详细信息,请参阅本教程.


Mri*_*lla 7

来自StackOverflow的另一个答案.这可以通过启用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");
Run Code Online (Sandbox Code Playgroud)


Sur*_*ala 7

是的,这是示例代码:

    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());
    }
Run Code Online (Sandbox Code Playgroud)

  • OP 想要请求,而不是响应标头。 (2认同)