Android中的HttpURLConnection有线记录

Posted

技术标签:

【中文标题】Android中的HttpURLConnection有线记录【英文标题】:HttpURLConnection wire logging in Android 【发布时间】:2014-04-06 01:55:45 【问题描述】:

我正在尝试在我的 logcat 中获取请求/响应的所有标头。似乎 HttpURLConnection 不像 org.apache.http 那样简单。 根据this blog你可以这样做:

sun.net.www.protocol.http.HttpURLConnection.level = ALL

似乎这已从 HttpURLConnection 的 android 实现中删除。 有什么简单的方法可以在 logcat 上嗅探请求/响应?

谢谢

【问题讨论】:

有人吗?一定有一个简单的方法...... 你想达到什么目的?正如@Rhand 所指出的那样,访问每个请求的标头可以很容易地完成,但似乎还有更多? 【参考方案1】:

这是您自己可以轻松完成的事情:

private static void logConnection(HttpURLConnection httpConnection) throws IOException 
    int status = httpConnection.getResponseCode();
    Log.d("logConnection", "status: " + status);
    for (Map.Entry<String, List<String>> header : httpConnection.getHeaderFields().entrySet()) 
        Log.d("logConnection", header.getKey() + "=" + header.getValue());
    

【讨论】:

使用您的代码,您将只记录响应代码和标头。请求将被消耗,不再可访问 这只是日志记录,您可以从处理请求的方法中调用它。例如打开连接、记录响应代码(通过调用 logConnection())、处理响应。【参考方案2】:

也许这个链接会有所帮助:https://***.com/a/37525989/11845778 不过,您仍然需要执行 logcat 部分。这只是以 JSON 格式获取响应。

【讨论】:

【参考方案3】:

我不确定 Android 上的标准 HttpURLConnection 是否可行。因此使用 OkHttp 库很容易实现:

HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);

OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.addInterceptor(loggingInterceptor);

OkHttpClient client = httpClientBuilder.build();
Request.Builder requestBuilder = new Request.Builder();
requestBuilder.url("http://android.com");

client.newCall(requestBuilder.build()).execute();

【讨论】:

以上是关于Android中的HttpURLConnection有线记录的主要内容,如果未能解决你的问题,请参考以下文章

Android中"get","post"请求的其中三种常用数据提交方式

JAVA多线程下载

OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

java抓取网页数据

用IO流发送Http请求

Java通过代理server上网