我正在使用Retrofit。
我有一个重定向到另一个端点的端点。后者(我最终得到的端点)在其URL中有一个我需要的参数。获取此参数值的最佳方法是什么?
我甚至无法弄清楚如何使用Retrofit获取我重定向到的网址。
答案 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();
}
现在您可以完全访问整个重定向历史记录。