Java 改装从重定向URL获取参数
我正在使用改装 我有一个重定向到另一个端点的端点。后者(我最终到达的端点)的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:
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在我的例子中是一个列表,但是可以很容易地列出
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();
}