java - Retrofit2 如何获取重定向网址 @HEAD ("/")

标签 java android retrofit retrofit2

我有一个缩小的网址,我想要最终的网址

在 Retrofit 1.9 中我曾经这样做过:

@HEAD("/XXXXXXXXX")
void fetchFinalUrl(Callback<String> cb);


public void getUrl() {
   mMinifyService.fetchFinalUrl(new Callback<String>() {
                @Override
                public void success(String s, Response response) {
                    response.getUrl();
                }
                [...]
}

但是现在使用 Retrofit 2 .getUrl() 不存在任何想法如何做到这一点?

提前致谢。

编辑

终于明白了!

public class ApiProvider<T> {

    private Retrofit retrofit;
    private static final String END_POINT_MINIFY = "XXXXXXX";

    public ApiProvider() {
        initAdapter();
    }

    public T getService(Class<T> service) {
        return retrofit.create(service);
    }

    private void initAdapter() {
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .followRedirects(false)
                .build();

        retrofit = new Retrofit.Builder()
                .baseUrl(END_POINT_MINIFY)
                .addConverterFactory(new ToStringConverterFactory())
                .client(client)
                .build();
    }

}

public interface IMinifyService {
    @HEAD("/XXXXXXXXX")
    Call<Void> fetchFinalUrl(Callback<String> cb);
}


public class MinifyServiceImpl {

    private ApiProvider<IMinifyService> mApiProvider = new ApiProvider<>();
    private IMinifyService mMinifyService = mApiProvider.getService(IMinifyService.class);

    public Promiser<String, Integer> fetchMinifyUrl() {
        return new Promiser<>((resolve, reject) -> mMinifyService.fetchMinifyUrl().enqueue(new Callback<Void>() {
            @Override
            public void onResponse(Call<Void> call, Response<Void> response) {
                if (response.code() >= 300 && response.code() < 400){
                    resole.run(response.headers().get("Location"));
                } else {
                    reject.run(response.code());
                }
            }

            @Override
            public void onFailure(Call<Void> call, Throwable t) {
                reject.run(t.hashCode());
            }
        }));
    }

}

如果你想使用 Promizer --> Click here

最佳答案

response.raw().request().url()

关于java - Retrofit2 如何获取重定向网址 @HEAD ("/"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37548238/

相关文章:

android - 将 Retrofit 实例保存在内存中是一种好习惯吗?

java - Intent服务AsyncTask后台setAdapter

java - Java Media Framework 不是跨平台的吗?

android - 奥托事件不开火

android - 使用Gradle构建并运行tensorflow lite演示

java - Android 布局中的绝对居中

android - 改造 2 : responseBodyConverter converts to null object

java - 透视 xml 列标签和 java

java - Jackson - 递归解析为 Map<String, Object>

java - 改造:使用 JSON 数组发送 POST 请求