Java 改装从重定向URL获取参数

Java 改装从重定向URL获取参数,java,android,networking,retrofit,Java,Android,Networking,Retrofit,我正在使用改装 我有一个重定向到另一个端点的端点。后者(我最终到达的端点)的URL中有一个我需要的参数。获取此参数值的最佳方法是什么 我甚至不知道如何使用改型来获取重定向到的URL。我正在使用改型。我可以通过以下方式获得重定向url: private boolean handleRedirectUrl(RetrofitError cause) { if (cause != null && cause.getResponse() != null) { Lis

我正在使用改装

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


我甚至不知道如何使用改型来获取重定向到的URL。

我正在使用改型。我可以通过以下方式获得重定向url:

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;
}
private boolean handleRedirectUrl(错误原因){
if(原因!=null&&cause.getResponse()!=null){
List headers=cause.getResponse().getHeaders();
用于(标题:标题){
//关键字\u标题\u重定向\u位置=“位置”
if(KEY\u HEADER\u REDIRECT\u LOCATION.equals(HEADER.getName())){
字符串重定向URL=header.getValue();
返回true;
}
}
}
返回false;
}

希望它能帮助别人。

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

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并将其添加到改装中(本例使用2.0)


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

OkHttp的响应将为您提供有线级别的请求()。这将是从重定向启动响应的请求。请求将为您提供其HttpUrl,HttpUrl可以为您提供其参数的键和值、路径等


对于改型2,只需使用改型2.Response.raw()获得okhttp3.Response,然后按照上面的操作即可。

遇到同样的问题,还有更新吗?@文超我会用一个OkHttp网络拦截器抓取结果响应并获取其url。更新后的答案似乎是这个问题的答案。完整访问整个重定向历史的代码是什么?可能更完整的答案:locationHistory在我的例子中是一个列表,但是可以很容易地列出。另一个答案与Android有关,我的答案是通用Java“locationHistory”部分指的是什么?
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();
}