拦截查询字符串

Intercept query strings

我需要为OKHttp写一个中间件来拦截所有发送的查询参数(key1=value1&key2=value2&...),并根据参数生成一个摘要,然后放在一个特定的header上,随请求一起发送,我可以通过以下方式拦截所有请求:

OkHttpClient httpClient = new OkHttpClient();  
httpClient.interceptors().add(new Interceptor() {  
    @Override
    public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
        Request original = chain.request();

        String digest = "How can I get sended paramters?";

        Request request = original.newBuilder()
            .header("User-Agent", "Your-App-Name")
            .header("Digest", digest)
            .method(original.method(), original.body())
            .build();

        return chain.proceed(request);
    }
});

但是我找不到检索参数列表的方法!有什么想法吗?

已经有一段时间了,但我相信你可以做到:

Request original = chain.request();
String params = original.url().query();

目前没有 android 环境来测试它。如果不查看 okhttp javadocRequestHttpUrl

编辑

对于 post 正文,有一个问题 ,我认为它符合您的要求,但简而言之,它类似于:

Request original = chain.request();
Buffer buffer = new Buffer();
original.body().writeTo(buffer);
String bodyStr = buffer.readUtf8();