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不然不能 创建新实例。
以下就是代码:
/**
* @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地址的更多相关文章
- android获取Mac地址和IP地址
获取Mac地址实际项目中测试了如下几种方法:(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法) //根据Wifi信 ...
- Android Studio 下载地址【包括国内本地下载】
Android Studio 下载地址,目前最新可下载地址,尽量使用下载工具. Android Studio正式发布,给Android开发者带来了不小的惊喜.但是下载地址却不给力,国内似乎无法正常下载 ...
- android 官方demo地址
android官方demo地址都放在了github上:https://github.com/googlesamples
- Android Studio 下载地址 & SDK 更新教程
Android Studio 下载地址: http://www.android-studio.org/ SDK 更新教程: http://www.androiddevtools.cn/ SDK 推荐使 ...
- Android WebView 302斗争之旅
一.背景 越来越多的业务接入,项目内多多少少会出现几个H5页面,只是单纯的提供WebView容器接入H5页面根本满足不了需求,他们需要登录态,需要制定协议控制Native的导航栏,或者需要JsBrid ...
- android platform下载地址
大陆直接访问Android的光放网站一般情况下比较困难,特此列出了Android各个SDK版本的直接下载地址. ADT 23.0.4:https://dl.google.com/android/ADT ...
- Android SDK下载地址
原地址:http://lameck.blog.163.com/blog/static/38811374201262111309677/ Android SDK.ADT.tools等官方下载地址(201 ...
- android源码地址及下载介绍
git clone https://android.googlesource.com/device/common.git git clone https://android.googlesour ...
- android studio下载地址
AndroidStudio3.0 下载地址——高速下载 https://www.androiddevtools.cn/ 2017年08月20日 22:41:09 qq风轻云淡 阅读数:5559 ...
随机推荐
- java基础4_字符串
一 字符串 Java字符串关键字是String,是一个类,创建新的字符串即创建一个新的对象. 1.字符串的声明及初始化. String str; //只做声明 String str1="aa ...
- 基于AutoCAD的ObjectARX之NET扩展(mcnetarx)-AcdbEntNext、AcdbEntLast
1.AcdbEntLast用于获取最后一个创建的实体. 2.AcdbEntNext用于获取指定实体名称之后的下一个创建的实体. ' 定义保存实体名称的变量 Dim ent() As Integer = ...
- 去掉tableview cell的左边间隙问题
http://www.jianshu.com/p/ba32f45222e0 简书上面的一篇文章.
- Canny边缘检测及图像缩放之图像处理算法-OpenCV应用学习笔记四
在边缘检测算法中Canny颇为经典,我们就来做一下测试,并且顺便实现图像的尺寸放缩. 实现功能: 直接执行程序得到结果如下:将载入图像显示在窗口in内,同时进行图像两次缩小一半操作将结果显示到i1,i ...
- Java解析网段下包含的所有IP地址
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;impor ...
- linux redmine 搭建
redmine搭建过程参考:http://www.tuicool.com/articles/InMbym 注意事项: 配置文件必须以2个空格开始 启动(指定了端口,和绑定的IP): ruby bin/ ...
- 解决VS2008 开发Windows Mobile 项目生成速度慢的问题(转)
最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...
- 【读书笔记】.Net并行编程(三)---并行集合
为了让共享的数组,集合能够被多线程更新,我们现在(.net4.0之后)可以使用并发集合来实现这个功能.而System.Collections和System.Collections.Generic命名空 ...
- 【月末轻松篇】--- 那些奇葩的Bugs
不能说所有的bug都是纸老虎,但往往那种看似很奇葩的bug,导致的原因确实很简单,烦了你一段时间,找到真相又让你忍不住一笑.什么是奇葩的bug呢.我的定义是:代码逻辑都一样,但在A处是好的,到了B处就 ...
- JavaScript工具库之Lodash
你还在为JavaScript中的数据转换.匹配.查找等烦恼吗?一堆看似简单的foreach,却冗长无趣,可仍还在不停的repeat it!也许你已经用上了Underscore.js,不错,你已经进步很 ...