问题
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