android 處理302地址

來源:互聯網
上載者:User

標籤:

最近項目中需要用到重新導向下載,所以找了很多的方法都不合適。因為下載的連結並非單純的地址,而是需要多次轉寄的,

在下載的時候用的是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         }

 

android 處理302地址

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.