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         }
时间: 2024-08-14 02:44:00

android 处理302地址的相关文章

在android程序中怎么执行ifconfig命令来修改android 的ip地址,

1.引入: import android.provider.Settings; import android.content.ContentResolver; ps:在Setting.System中有以下标志 WIFI_USE_STATIC_IP WIFI_STATIC_IP WIFI_STATIC_NETMASK WIFI_STATIC_GATEWAY WIFI_STATIC_DNS1 and WIFI_STATIC_DNS2 2.在AndroidManifest中加入<uses-permis

Android Studio 下载地址

下载地址:https://developer.android.com/sdk/index.html#download      这个网址可以下载需要的东西,翻墙的话可以给 [email protected] 发一个邮件(内容任意),自动回复里面有FQ软件的下载地址. Android Studio 下载地址,布布扣,bubuko.com

android 获取MAC地址

由于WiFi 的Mac address 是一个被动咨询.一般在开机后,不会主动上到的系统里.要等待WiFi硬件启动后,才会把有关Mac address资料记载入系统去. 所以一般android系统获取Mac address时候会出现以下几种情况: 1.在WiFi打开的时候可以获取到Mac地址 2.关闭WiFi,不重启系统,也可以获取到Mac address 3.系统重启后,不打开WiFi,获取不到Mac address 4.系统重启后,不开开WiFi,打开2G.3G网络,获取不到Mac addr

adt-bundle和android studio下载地址(不定期更新)

因为众所周知的原因,android官网打不开.在这里公布IDE地址,可以用迅雷等软件直接下载. adt-bundle-windows-x86: http://dl.google.com/android/adt/adt-bundle-windows-x86-20140702.zip adt-bundle和android studio下载地址(不定期更新),布布扣,bubuko.com

android获取Mac地址和IP地址

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

Android SDK下载地址

原地址:http://lameck.blog.163.com/blog/static/38811374201262111309677/ Android SDK.ADT.tools等官方下载地址(2012.06.28更新) 1.android-sdk_r20<platform>    (1)http://dl.google.com/android/android-sdk_r20-windows.zip    (2)http://dl.google.com/android/android-sdk_

Java和Android对Mac地址加1减1

Java和Android对Mac地址加1或者减1 /** * Mac + 1 * @author YOLANDA * @return */ public static String getMacAdd1(String mac){ String lastChar = mac.substring(mac.length() - 1).toUpperCase(Locale.getDefault()); mac = mac.substring(0, mac.length() - 1).toUpperCas

Android Studio 下载地址以及Android SDK下载方法

记录一下: Android Studio 下载地址: http://www.android-studio.org/ Android SDK下载方法 : SDK 下载有两种方式,一种是配置代理下载,一种是国内镜像下载. 第一种: 配置代理下载 Google SDK 下载的两个地址是 dl.google.com 和 dl-ssl.google.com 第一步:分别在ping.chinaz.com 网站上ping检测一下可用的dl.google.com 和 dl-ssl.google.com的代理IP

android platform下载地址

查看需要下载的android platform包的地址: https://dl-ssl.google.com/android/repository/repository-7.xml 1.  Android 2.2 platform : http://dl-ssl.google.com/android/repository/android-2.2_r02-linux.zip 2. Android 3.2 platform: http://dl-ssl.google.com/android/repo