2014-10-03 28 views
0

我调试Java应用程序,它利用了org.apache.http的* API,例如:HTTP交互打印,而无需耗费

HttpResponse response = m_httpClient.execute(head,new BasicHttpContext()); 

这只是一个例子,我的项目是很多这样的线一个,我想插入 打印日志应打印的内容和标题,例如:

Log.i(TAG, "---> Request <-----"); 
     String str = ""; 
     for (Header header : post.getAllHeaders()) 
     { 
      str += header.getName() + " : " + header.getValue() + "\n"; 

     } 
     Log.i(TAG, str); 
     Log.i(TAG, "---> Response <-----"); 
     HttpResponse response = client.execute(post); 
     Log.i(TAG, EntityUtils.toString(response.getEntity())); 

     response = client.execute(post); 

至于解决办法,以避免“IllegalStateException异常:内容都被消耗”我执行请求两次,但我真的做不是那样,是否有解决方案 以避免这种情况?

+0

EntityUtils.toString indirectely消耗HTTP响应InputStream来构建String对象。最短的解决方案是重复使用后者的字符串。 – 2014-10-03 17:59:37

回答

1

您使用哪个http客户端?

每个HttpClient的味道应该有“接通电线头日志”一googleable技术 ....

例如,如果您正在使用的客户端org.apache,这里是你做什么turn on the logs你所要求的..

用铁丝&头日志开启,logcat的包括你所看到的here

0

这么快的研究后,这看起来是一个相当普遍的例外。

无论如何,你可以只要求响应字符串一次吗?将它存储在一个方法变量中,记录响应字符串,然后只返回响应字符串(而不是整个HttpResponse对象)?

或者是代码进一步的调用链实际上工作的其他方法的HttpResponse然后只是响应的内容?

我有一个其他的想法,但不是超级好玩的写法,你可以自己实现所有不同的HttpResponse接口,并编写可缓存原始HttpResponse对象所有可能行为的行为。基本上,用你自己的对象包装原始的HttpResponse。看起来像很多工作,但它会为你正在做的工作,希望。