如何在Android Studio网络分析器中查看POST请求内容?
解决Android Studio 3网络分析器无法查看POST请求内容的问题
嘿,我之前在Android Studio 3里也踩过这个POST请求体看不到的坑,给你几个亲测有效的解决思路:
检查请求的压缩/加密状态
如果你的POST请求启用了gzip压缩,或者用了HTTPS但证书没被Android Studio信任,网络分析器大概率解析不了请求体。可以先临时关掉请求压缩试试;要是是HTTPS的问题,你可以把应用的SSL证书导入到AS的JDK密钥库:- 导出应用的SSL证书(比如从手机系统的证书管理里导出,或者通过代码生成)
- 找到Android Studio自带的JDK路径(一般在
Android Studio/jre目录下),在终端执行:
默认密钥库密码是keytool -importcert -file 你的证书路径.crt -keystore jre/lib/security/cacerts -alias 自定义别名changeit,导入后重启AS再抓包试试。
检查网络分析器的过滤规则
有时候可能不小心碰了过滤设置,把POST请求的内容屏蔽了。点击网络分析器顶部的过滤栏,确保没有勾选只显示GET请求,也没有输入错误的过滤关键词。先清空过滤条件,重新发起请求抓包看看。用OkHttp拦截器兜底查看
如果上面的方法都不奏效,要是你用的是OkHttp作为网络库,加个拦截器直接把POST请求体打印到Logcat里绝对靠谱:OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if ("POST".equals(request.method())) { // 处理普通表单请求 if (request.body() instanceof FormBody) { FormBody formBody = (FormBody) request.body(); StringBuilder bodyBuilder = new StringBuilder(); for (int i = 0; i < formBody.size(); i++) { bodyBuilder.append(formBody.name(i)) .append("=") .append(formBody.value(i)) .append("&"); } if (bodyBuilder.length() > 0) { bodyBuilder.deleteCharAt(bodyBuilder.length() - 1); } Log.d("POST_REQUEST_BODY", bodyBuilder.toString()); } // 处理JSON请求 else if (request.body() instanceof RequestBody) { Buffer buffer = new Buffer(); request.body().writeTo(buffer); String jsonBody = buffer.readUtf8(); Log.d("POST_REQUEST_BODY", jsonBody); } } return chain.proceed(request); } }) .build();这个拦截器能覆盖表单和JSON两种常见的POST请求格式,直接在Logcat里就能看到完整的请求内容。
考虑升级Android Studio版本
Android Studio 3的网络分析器确实存在一些兼容性bug,比如对Multipart请求或者某些HTTP库的支持不好。如果项目允许的话,升级到AS 3.2及以上版本,后续版本对网络分析器做了不少优化,很多这类问题都直接修复了。
补充:如果是上传文件的Multipart POST请求,AS 3的网络分析器基本没法正确显示请求体,这时候用拦截器打印是最稳妥的方式。
内容的提问来源于stack exchange,提问作者Haluk




