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"请求的其中三种常用数据提交方式