Http交互打印而不消耗

时间:2014-10-03 16:30:11

标签: java android http

我正在调试一个使用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:内容已消耗”的解决方法我正在执行请求两次,但我确实那样,是否有解决方案 避免这个?

2 个答案:

答案 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。看起来好像很多工作,但希望这对你正在做的事情有用。