拦截查询字符串

时间:2016-02-09 14:36:21

标签: java android retrofit okhttp

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

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);
    }
});

但我无法找到检索参数列表的方法!任何想法?

1 个答案:

答案 0 :(得分:2)

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

Request original = chain.request();
String params = original.url().query();
目前还没有安卓环境来测试这个问题。如果没有查看RequestHttpUrl

okhttp javadoc

修改

对于帖子正文有一个问题here我认为你做了什么,但简而言之它是​​这样的:

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