2014-09-17 4 views
3

Я использую Модернизацию.Retrofit получить параметр с URL-адреса переадресации

У меня есть конечная точка, которая перенаправляется на другую конечную точку. Последний (конечная точка, в которой я заканчиваюсь) имеет параметр в своем URL-адресе, который мне нужен. Каков наилучший способ получить значение этого параметра?

Я даже не могу понять, как получить URL-адрес, к которому я перенаправлен, с использованием «Дооснащения».

+0

с такой же проблемой, обновлениями? – WenChao

+0

@WenChao Я бы использовал сетевой перехватчик OkHttp, чтобы захватить полученный ответ и получить его url. –

+0

Обновлен ответ, на который, как представляется, задается этот вопрос. –

ответ

2

Ответ OkHttp предоставит вам запрос на уровне провода (https://square.github.io/okhttp/3.x/okhttp/okhttp3/Response.html#request--). Это будет запрос, который инициировал ответ от перенаправления. Запрос предоставит вам HttpUrl, и HttpUrl может предоставить вам ключи и значения параметров, пути и т. Д.

С помощью Retrofit 2 просто используйте функцию retrofit2.Response.raw(), чтобы получить сообщение okhttp3.Response и следуйте инструкциям выше.

0

Я использую модификацию. И я могу получить 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; 
} 

Надеюсь, это может помочь кому-то.

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 и добавить, что Модифицированные (с помощью 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(); 
} 

Теперь у вас есть полный доступ всю историю переадресации.

+0

И каков код для полного доступа всей истории переадресации? – compte14031879

+0

Вероятно, более полный ответ: http://stackoverflow.com/questions/31667230/how-to-get-the-response-url-from-retrofit – compte14031879

+0

locationHistory был списком в моем случае, но мог легко быть List < okhttp3.Response>. Этот другой ответ относится к Android, у меня общий Java –