• android 处理302地址


    最近项目中需要用到重定向下载,所以找了很多的方法都不合适。因为下载的链接并非单纯的地址,而是需要多次转发的,

    在下载的时候用的是URL来打开数据流。但是多次测试并不能对多次跳转的链接打开请求。对于302http状态来说。只有最终的地址才是200才是我们想要的

    于是就需要解析该多次跳转的链接。

    这里我用到了AndroidHttpClient这个类,百度一下,这个类时sdk2.3后就有了,AndroidHttpClient没有公开的构造函数,只能通过静态方法newInstance()方法来获得AndroidHttpClient对象。
    AndroidHttpClient对于DefaultHttpClient做了一些改进,使其更使用用于Android项目:
    1.关掉过期检查,自连接可以打破所有的时间限制。
    2.可以设置ConnectionTimeOut(连接超时)和SoTimeout(读取数据超时)。
    3.关掉重定向。
    4.使用一个Session缓冲用于SSL Sockets。
    5.如果服务器支持,使用gzip压缩方式用于在服务端和客户端传递的数据。
    6.默认情况下不保留Cookie.

    AndroidHttpClient不能在主线程中execute,会抛出异常。AndroidHttpClient通过静态方法newInstance 获得实例,参数是代理,不用代理的话填“”。DefaultHttpClient默认是启用Cookie的,AndroidHttpClient默认不启 用Cookie,要使用的话每次execute时要加一个HttpContext参数,并且添加CookieStore。用完后别忘了close不然不能 创建新实例。

    以下就是代码:

     1   /**
     2          * @return
     3          * 该方法用于判断最终的链接得出
     4          */
     5         public String getRedirectUrl(String testUrl){
     6             
     7             AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
     8             HttpGet httpGet = new HttpGet(testUrl);
     9             try {
    10                 HttpResponse hr  = client.execute(httpGet);
    11                 int code = hr.getStatusLine().getStatusCode();
    12                 Log.i("ABC", "code:"+code);
    13                 if(code != HttpStatus.SC_OK){
    14                     Header[] hander = hr.getHeaders("Location");
    15                     if(hander != null && hander.length > 0){
    16                         String redictUrl = hander[hander.length-1].getValue();
    17                         //多次判定重定向
    18                         return getRedirectUrl(redictUrl);
    19                     }
    20                 }
    21             } catch (IOException e) {
    22                 e.printStackTrace();
    23             } finally{
    24                 if(client != null){
    25                     client.close();
    26                 }
    27             }
    28             return testUrl;
    29         }
  • 相关阅读:
    python django blog
    Django框架的学习
    Django 与 Flask框架的比较
    pycharm windows 远程修改服务器代码
    matlab的Deep Learning的toolbox 中的SAE算法
    什么是有监督学习和无监督学习
    linux 操作系统rz sz 快速上传和下载文件
    PDF,word ,PPT,等各种文件转换在线工具(免费)
    linux 安装 rz sz 快速上传和下载文件
    sci-hub 下载地址更新
  • 原文地址:https://www.cnblogs.com/taofudemo/p/4969672.html
Copyright © 2020-2023  润新知