Android 出現Http 302跳轉問題

2021-09-06 21:35:33 字數 2540 閱讀 9849

最近在做乙個網路診斷功能,檢測外網連通性,測試位址是

測試方法:

httpurlconnection進行網路連線訪問,根據訪問返回的http狀態碼是否為200,確定外網是否連通。測試**:

int rescode = -1;

try

});sslcontext sslctx = sslcontext.getinstance("ssl");

sslctx.init(null, new trustmanager, new securerandom());

if (sslctx != null)

}conn.setrequestmethod("get");

conn.setconnecttimeout(timeoutmillis);

conn.connect();

rescode = conn.getresponsecode(); // 獲取get請求responsecode

} catch (exception e) finally

}

測試結果:大部分裝置上該方式處理沒有問題,在極少的幾個裝置上,發現永遠是非200的狀態碼。但是本身也是可以連線外網的,訪問沒有問題。

分析:

在瀏覽器輸入進行抓包或者通過瀏覽器f12檢視network訪問,如下圖,

訪問後,伺服器吐回狀態碼302 ,然後locatioin欄位標識瀏覽器應該跳轉到了 。

那之前的**健壯性不強,沒有考慮到302跳轉場景,怎麼來規避呢?

開始時候,想的是使用簡單的方式達到效果,翻閱了的httpsurlconnection 類的所有方法,存在這個方法:

/**

* sets whether this connection follows redirects.

** @param followredirects

* if this connection will follows redirects, false

* otherwise.

*/public void setinstancefollowredirects(boolean followredirects)

從這個方法來看,貌似是可以設定是否支援重定向訪問,所以這樣設定:

conn.setinstancefollowredirects(true);

結果,訪問302的位址還是失敗,根本不會自動跳轉訪問。也不清楚具體原因,估計要看原始碼了,所以換了方式處理該問題;

方式1: 解析http請求返回的location,進行重新訪問請求

示例**:

}方式2:使用androidhttpclient進行網路訪問通過設定clientpnames.handle_redirects為true,來達到重定向請求功能。

ps:defaulthttpclient是預設支援http get的重定向訪問,也可以直接用該類實現請求。post還是不支援的。

public static int getresponsecode(string urlstr, int timeoutmillis)  catch (exception e)  finally 

}

302跳轉本身是比較常見的一種訪問訪問結果,在寫網路請求時候,需要考慮,並且選擇合適的方式來處理,增強**健壯性。

Android學習 Http請求

今天繼續學習網路程式設計模組。首先是webview,簡單的來訪問網頁 在這之前先要什麼訪問網路的許可權 android name android.permission.internet 實現在layout中新建webview元件,然後在activity中新建webview物件,然後呼叫setwebv...

android 原生http請求

向指定 url 傳送post方法的請求 param url 傳送請求的 url param param 請求引數,請求引數應該是 name1 value1 name2 value2 的形式。return 所代表遠端資源的響應結果 public static string sendpost strin...

Android學習 HTTP請求

一 使用httpurlconnectionurl url new url httpurlconnection connection httpurlconnection url.openconnection 在得到httpurlconnection的例項後,設定http請求所使用的方法 get和pos...