【问题标题】:Android Volley get redirect urlAndroid Volley 获取重定向网址
【发布时间】:2016-09-18 13:17:30
【问题描述】:

我需要从 Volley 响应中获取重定向 url:在我的情况下,最后一个重定向 url 返回 404,但我不知道如何从 VolleyError 获取 url。

【问题讨论】:

标签: android android-volley


【解决方案1】:

将您的服务器设计为在将响应发送回客户端时在标头中添加 URL,之后您可以从 VolleyError 获取标头

      NetworkResponse response = volleyError.networkResponse;

      if (response != null && response.data != null) {
           Map<String, String> headers = response.headers;
           String URL = headers.get("my_url_key");
      }

或者,每次您执行某些请求时,您都可以覆盖 getHeaders(),例如

      JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET,
                    createURL(), null, success, errorListener) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    Map<String, String> header = new HashMap<>();
                    header.put("my_url_key", "http://mywebsite.com");
                    return header;
                }
      };

检索与上面的代码相同,但更方便,因为您不再需要在服务器上进行任何更改。

如果您想根据响应代码执行重定向,您可以执行以下操作:

 NetworkResponse response = volleyError.networkResponse;

 if (response != null && response.data != null) {
       if(response.statusCode == 404){
           // Do something here
       }
 }

希望服务器将重定向 URL 与二进制响应一起包含。

例如。

  NetworkResponse response = volleyError.networkResponse;

     if (response != null && response.data != null) {
           JSONObject o = new JSONObject(new String(response.data));
           // get the info here
     }

【讨论】:

  • 我无法更改服务器
  • 我喜欢这种方法,但是我怎样才能得到重定向的 url 并将其放到 header 中呢?
  • @konopko 据我所知,除非您的服务器将其与标头一起发送,否则您无法获取它。 IMO 一个好的服务器设计还必须始终添加重定向站点。例如{ "errorcode":111, "redirect":"example.com", "message":"File not Found!" }
  • 感谢您的回答,但在我的情况下,服务器没有在标头和数据中检索 URL
猜你喜欢
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2013-07-03
  • 2017-10-13
  • 1970-01-01
相关资源
最近更新 更多