You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Android Studio网络分析器中查看POST请求内容?

解决Android Studio 3网络分析器无法查看POST请求内容的问题

嘿,我之前在Android Studio 3里也踩过这个POST请求体看不到的坑,给你几个亲测有效的解决思路:

  • 检查请求的压缩/加密状态
    如果你的POST请求启用了gzip压缩,或者用了HTTPS但证书没被Android Studio信任,网络分析器大概率解析不了请求体。可以先临时关掉请求压缩试试;要是是HTTPS的问题,你可以把应用的SSL证书导入到AS的JDK密钥库:

    1. 导出应用的SSL证书(比如从手机系统的证书管理里导出,或者通过代码生成)
    2. 找到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

火山引擎 最新活动