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

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

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

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

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

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

来自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"); 

是的,这是示例代码:

  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
httpHeaders = Arrays.asList(response.getAllHeaders()); for (Header header : httpHeaders) { System.out.println("Headers.. name,value:"+header.getName() + "," + header.getValue()); }

当您执行请求时,您正在传递HttpRequest对象。 它有方法getAllHeaders()

如果使用Logback作为日志记录框架,请将以下配置添加到logback.xml / logback-test.xml文件中:

       

添加此配置后,Logback的日志追加程序现在将显示有关HTTP请求和响应标头的有用的HttpClient相关信息。