我正在调试一个使用org.apache.http。* API的Java应用程序:
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 :(得分:1)
你使用哪个http客户端?
每个httpclient风格应该有一个googleable技术,用于&#34; 启用Wire和Header日志&#34; ....
例如,如果您使用的是org.apache客户端,那么您需要执行以下turn on the logs的操作。
使用wire&amp;标题日志已打开,logcat包含您所看到的内容here
答案 1 :(得分:0)
经过如此快速的研究,这看起来很普遍。
无论如何你可以只问一次响应字符串吗?将它存储在方法变量中,记录响应字符串然后只返回响应字符串(而不是整个HttpResponse对象)?
或者是调用链中的代码是否实际上正在处理HttpResponse的其他方法,那么只是响应的内容?
我曾经有过另一个想法,但编写起来不是很有趣,你可以自己实现所有不同的HttpResponse接口,并编写将“缓存”原始HttpResponse对象的所有可能行为的行为。基本上,使用您自己的对象包装原始HttpResponse。看起来好像很多工作,但希望这对你正在做的事情有用。