zoukankan      html  css  js  c++  java
  • 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         }
  • 相关阅读:
    用单循环链表实现约瑟夫问题。
    迅雷2014校园招聘笔试题
    JSP:JAVA Bean在JSP中的运用
    大学生学业指导类书目
    IOS详解TableView——对话聊天布局的实现
    jQuery EasyUI API 中文文档
    在Centos 5.4上安装Mysql5.5.10 (整理以前的工作文档)
    Centos环境下部署游戏服务器-SVN
    原本好好的程序,怎么电脑重启后就打不开了?
    UVA 10911 Forming Quiz Teams(dp + 集合最优配对问题)
  • 原文地址:https://www.cnblogs.com/taofudemo/p/4969672.html
Copyright © 2011-2022 走看看