我正在调试一个Java应用程序,该应用程序使用org.apache.http.*neneneba API,例如:
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:内容已被消耗"的变通方法,我执行了两次请求,但我确实这样做了而不是,有解决方案吗为了避免这种情况?
您使用哪个http客户端?
每个httpclient风格都应该有一个可在谷歌上搜索的技术,用于"打开Wire和Header日志"。。。。
例如,如果您使用的是org.apache客户端,下面是您打开所需日志的方法。。
使用wire&头日志打开,logcat包括您在这里看到的
经过如此快速的研究,这似乎是一个非常普遍的例外。
是否可以只要求一次响应字符串?将其存储在方法变量中,记录响应字符串,然后只返回响应字符串(而不是整个HttpResponse对象)?
或者,调用链上的代码是否真的在HttpResponse的其他方法上工作,然后只是响应的内容?
我还有一个想法,但写起来并不是很有趣,那就是你可以自己实现所有不同的HttpResponse接口,并编写行为来"缓存"原始HttpResponse对象的所有可能行为。基本上,用您自己的对象包装原始的HttpResponse。看起来工作量很大,但希望它能对你所做的事情起作用。