Android使用HttpURLConnection的302重定向問題

HttpURLConnection編程基礎原理

 在Android中,HttpURLConnection是比較基礎的網絡編程,因此在入門的時候建議大家學會使用這個編程,有助於大家瞭解其原理。這裏就簡單介紹一下,因爲我們這篇博客主要解決的問題是如何解決收到結果不是200,--------------

而是302重定向問題。

使用HttpURLConnection編程原理

我們編程時候遵循一下幾個步驟:

  1. 創建一個URL對象
URL url = new URL(http://www.baidu.com); 
  • 1
  1. 利用HttpURLConnection對象從網絡中獲取網頁數據
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  • 1
  1. 設置連接超時
conn.setConnectTimeout(6*1000);
  • 1
  1. 對響應碼進行判斷
if (conn.getResponseCode() != 200)    //從Internet獲取網頁,發送請求,將網頁以流的形式讀回來

throw new RuntimeException("請求url失敗");
  • 1
  • 2
  • 3
  1. 得到網絡返回的輸入流
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);
                        }

                    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章