HttpURLConnection編程基礎原理
在Android中,HttpURLConnection是比較基礎的網絡編程,因此在入門的時候建議大家學會使用這個編程,有助於大家瞭解其原理。這裏就簡單介紹一下,因爲我們這篇博客主要解決的問題是如何解決收到結果不是200,--------------
而是302重定向問題。
使用HttpURLConnection編程原理
我們編程時候遵循一下幾個步驟:
- 創建一個URL對象
URL url = new URL(http://www.baidu.com);
- 1
- 利用HttpURLConnection對象從網絡中獲取網頁數據
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- 1
- 設置連接超時
conn.setConnectTimeout(6*1000);
- 1
- 對響應碼進行判斷
if (conn.getResponseCode() != 200) //從Internet獲取網頁,發送請求,將網頁以流的形式讀回來
throw new RuntimeException("請求url失敗");
- 1
- 2
- 3
- 得到網絡返回的輸入流
InputStream is = conn.getInputStream();
- 1
響應碼不是200時而是302時,解決辦法
首先需要獲取head頭裏面的location內容,因此地址被重定向了,因此我們需要獲取對應的重定向的地址。
String url_str = et_url.getText().toString().trim();
URL url = new URL(url_str);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(3000);
//Toast.makeText(mContext,urlConnection.getResponseCode() + "", 0).show();
System.out.println("getResponseCode"+urlConnection.getResponseCode()+
以上就是原始代碼了,因此我們應該獲取其head中的location,查看現在的地址
String location = urlConnection.getHeaderField("Location");
System.out.println("location"+location+"");
拿到了新的地址,接下來我們應該尋找這個新的地址了
url = new URL(location);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(3000);
if(urlConnection.getResponseCode() == 200){
InputStream in = urlConnection.getInputStream();
String result = StreamUtils.getResult(in);
if(result != null){
Message msg = new Message();
msg.obj = result;
handler.sendMessage(msg);
}
}