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

在下载的时候用的是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不然不能 创建新实例。

以下就是代码:

   /**
* @return
* 该方法用于判断最终的链接得出
*/
public String getRedirectUrl(String testUrl){ AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
HttpGet httpGet = new HttpGet(testUrl);
try {
HttpResponse hr = client.execute(httpGet);
int code = hr.getStatusLine().getStatusCode();
Log.i("ABC", "code:"+code);
if(code != HttpStatus.SC_OK){
Header[] hander = hr.getHeaders("Location");
if(hander != null && hander.length > 0){
String redictUrl = hander[hander.length-1].getValue();
//多次判定重定向
return getRedirectUrl(redictUrl);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally{
if(client != null){
client.close();
}
}
return testUrl;
}

android 处理302地址的更多相关文章

  1. android获取Mac地址和IP地址

    获取Mac地址实际项目中测试了如下几种方法:(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法) //根据Wifi信 ...

  2. Android Studio 下载地址【包括国内本地下载】

    Android Studio 下载地址,目前最新可下载地址,尽量使用下载工具. Android Studio正式发布,给Android开发者带来了不小的惊喜.但是下载地址却不给力,国内似乎无法正常下载 ...

  3. android 官方demo地址

    android官方demo地址都放在了github上:https://github.com/googlesamples

  4. Android Studio 下载地址 & SDK 更新教程

    Android Studio 下载地址: http://www.android-studio.org/ SDK 更新教程: http://www.androiddevtools.cn/ SDK 推荐使 ...

  5. Android WebView 302斗争之旅

    一.背景 越来越多的业务接入,项目内多多少少会出现几个H5页面,只是单纯的提供WebView容器接入H5页面根本满足不了需求,他们需要登录态,需要制定协议控制Native的导航栏,或者需要JsBrid ...

  6. android platform下载地址

    大陆直接访问Android的光放网站一般情况下比较困难,特此列出了Android各个SDK版本的直接下载地址. ADT 23.0.4:https://dl.google.com/android/ADT ...

  7. Android SDK下载地址

    原地址:http://lameck.blog.163.com/blog/static/38811374201262111309677/ Android SDK.ADT.tools等官方下载地址(201 ...

  8. android源码地址及下载介绍

      git clone https://android.googlesource.com/device/common.git  git clone https://android.googlesour ...

  9. android studio下载地址

    AndroidStudio3.0 下载地址——高速下载 https://www.androiddevtools.cn/   2017年08月20日 22:41:09 qq风轻云淡 阅读数:5559   ...

随机推荐

  1. nginx 配置rewrite 笔记

    nginx 配置rewrite笔记: 通过下面的示例来说明一下,1. 先说说location : location 表示匹配传入的url地址,其中配置符有多种,各种情况的意义不一样: location ...

  2. C语言-数据类型

    数据类型 -基本数据类型 --char 字符型 --int  整型 --浮点型 ---float ---double -指针类型 --void* -空类型 -构架类型 --数组[] --结构体 str ...

  3. C++ 非阻塞套接字的使用 (1)

    在维护代码的过程中,发现软件运行的CPU占用率居高不下,在4核的电脑上占用了25%的CPU.查阅资料的得知,这是可能是由于软件中出现了死循环. 经过对软件的一些测试,最终确定了死循环出现的位置——通讯 ...

  4. Spring对Quartz的封装实现简单需注意事项

    前段时间在项目中一直使用正常的Quartz突然出现了任务漏跑的情况,由于我以前看过Quartz的内部实现,凭借记忆我觉得是由于Quartz的线程池的使用出现问题导致了故障的发生.为了搞清问题的真相,我 ...

  5. android更换工具链

    欢迎转载opendevkit文章, 文章原始地址: http://www.opendevkit.com/?e=73 android编译系统是跟随android源码一起发布的,使用了gcc编译器,也就是 ...

  6. 分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据

    分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据 今天开发找我,说数据库insert不进数据,叫我看一下 他发了一个截图给我 然后我登录上服务器,发现了可疑的地方,而且这个数据库之前 ...

  7. 解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)

    解剖SQLSERVER 第十四篇    Vardecimals 存储格式揭秘(译) http://improve.dk/how-are-vardecimals-stored/ 在这篇文章,我将深入研究 ...

  8. Elasticsearch笔记

    资料 官网: http://www.elasticsearch.org 中文资料:http://www.learnes.net/ .Net驱动: http://nest.azurewebsites.n ...

  9. Linux4:useradd、userdel、passwd、groupadd、chgrp、chown、df、du、sort、wget

    useradd 添加新的用户账号,只有root账户可以操作 -d 目录:指定用户主目录(默认在home下),若此目录不存在可同时使用-m创建主目录 -g 用户组:指定用户所属的用户组 -G 用户组:指 ...

  10. 团队项目——站立会议DAY13

    第十三次站立会议记录: 参会人员:张靖颜,钟灵毓秀,何玥,赵莹,王梓萱 项目进展: 1.张靖颜:在完成各项功能的基础上继续进行扩展完善 2.钟灵毓秀:进行模块分类的整合与纠错修改,整理错误向队友提出 ...