我需要使用改型从API调用中获取重定向URL。如果我用Postman
它测试URL,则会返回Header,并且可以看到其中的URL。这就是我进行改造的方式:
private static Interceptor interceptor = chain -> {
okhttp3.Response response = chain.proceed(chain.request());
Log.d("REDIRECT","to"+response.header("Location"));
return response;
};
public static NetworkInterface getNetworkInterface() {
if (networkInterface == null) {
serverGson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.setLenient()
.create();
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.followRedirects(true)
.addInterceptor(interceptor)
.build();
Retrofit retrofit = new Retrofit.Builder()
.client(client)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(serverGson))
.baseUrl(BASE_URL)
.build();
networkInterface = retrofit.create(NetworkInterface.class);
}
return networkInterface;
}
这是我的API调用:
Disposable api = Server.getNetworkInterface().oAuthUser("param",
"param","param",
"param","param")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(response-> {
if (response.isSuccessful()) {
String responseHeader = response.headers().toString();
Log.d("auth header",responseHeader);
}
}, error-> {
error.printStackTrace();
});
我得到的是:
2019-03-29 14:55:35.935 22434-22434/com.package.app W/System.err: java.net.ConnectException: Failed to connect to BASEURL/IP ADDRESS
没关系,因为我应该重定向到的第二个URL没有指向任何地方,因此如果我调用它,我应该找回它。但是我一开始就调用了有效的URL,邮递员回了,302 Found
所以我认为在进行改造时,它会尝试调用该URL,但它不起作用,因此,我会得到此错误消息。
问题是在错误情况下,我应该看到第二个URL,而不是第一个URL。在onFailure情况下,如何获取第二个URL?
通过禁用重定向解决了该问题,这是我返回的响应onResponse
,它包含消息中的URL。
.followRedirects(false)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句