Retrofit从重定向URL获取参数

时间:2014-09-17 15:49:56

标签: java android networking retrofit

我正在使用Retrofit。

我有一个重定向到另一个端点的端点。后者(我最终得到的端点)在其URL中有一个我需要的参数。获取此参数值的最佳方法是什么?

我甚至无法弄清楚如何使用Retrofit获取我重定向到的网址。

3 个答案:

答案 0 :(得分:3)

OkHttp的响应将为您提供有线请求(https://square.github.io/okhttp/3.x/okhttp/okhttp3/Response.html#request--)。这将是从重定向发起响应的请求。请求将为您提供其HttpUrl,HttpUrl可以为您提供参数'键和值,路径等

使用Retrofit 2,只需使用retrofit2.Response.raw()获取okhttp3.Response并按照上述步骤操作。

答案 1 :(得分:1)

我正在使用改造。我可以按照这种方式获取重定向网址:

private boolean handleRedirectUrl(RetrofitError cause) {
    if (cause != null && cause.getResponse() != null) {
        List<Header> headers = cause.getResponse().getHeaders();
        for (Header header : headers) {
             //KEY_HEADER_REDIRECT_LOCATION = "Location"
            if (KEY_HEADER_REDIRECT_LOCATION.equals(header.getName())) {
                String redirectUrl = header.getValue();

                return true;
            }
        }
    }

    return false;
}

希望它可以帮助别人。

答案 2 :(得分:1)

解决方法是使用拦截器,例如

private Interceptor interceptor = new Interceptor() {
    @Override
    public okhttp3.Response intercept(Chain chain) throws IOException {
        okhttp3.Response response = chain.proceed(chain.request());
        locationHistory.add(response.header("Location"));
        return response;
    }
};

将拦截器添加到您的HttpClient并将其添加到Retrofit(在此示例中使用2.0)

public void request(String url) {
    OkHttpClient.Builder client = new OkHttpClient.Builder();
    client.followRedirects(true);
    client.addNetworkInterceptor(interceptor);
    OkHttpClient httpClient = client.build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .client(httpClient)
            .build();
}

现在您可以完全访问整个重定向历史记录。