使用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相关信息。
- 什么是apache中的SchemeRegistry以及何时应该使用它?
- java.io.IOException:尝试从封闭流中读取
- Apache HttpClient CoreConnectionPNames.CONNECTION_TIMEOUT什么都不做?
- 从Java中的特定IP生成HttpRequest
- 如何在java中设置SSL协议版本? 我怎么知道哪一个? javax.net.ssl.SSLException:收到致命警报:protocol_version
- 修复java.net.SocketTimeoutException:读取超时
- 从Commons HttpClient迁移到HttpComponents Client
- Java http客户端和POODLE
- Android JAVA到SharePoint 2013 NTLM 401取消授权