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?
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");
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());
}
When you execute the request you are passing somewhere HttpRequest object. It has method getAllHeaders()
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.
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.