安卓開發之網路請求HttpURLConnection

cxmscb發表於2016-07-23

一、相關API

  1. URL:包含請求地址的類

    • URL(path):包含請求地址的構造方法
    • openConnection():得到與伺服器連線的物件
  2. HttpURLConnection:代表與伺服器連線的類

    • 準備工作:

      • setRequestMethod(“GET”) / setRequestMethod(“POST”):設定請求方式,預設方式為”GET”
      • setConnectTimeout(time):設定連線超時時間,單位ms
      • setReadTimeout(time):設定讀取伺服器返回資料的時間,單位ms
        URL 連線是否可用於輸入和/或輸出(使用了連線的..流就設定..為true)
      • setDoOutput(boolean) // 預設為false
      • setDoInput(boolean) // 預設為true

      • //設定讀取/下載的起始位置
        String sProperty =”bytes=”+ startP + “-“+endP;
        .setRequestProperty(“Range”,sProperty);

    • 開始連線伺服器:

      • connect():開始連線伺服器
    • 請求工作:

      • int getResponseCode():得到伺服器返回的結果碼
      • int getContentLength():得到伺服器返回的資料長度(位元組),常用於下載進度的顯示。

      • getOutputStream():返回一個指向伺服器端的資料輸出流

      • getInputStream():返回一個從伺服器返回的資料輸入流
    • 斷開連線:

      • disconnect():斷開連線

二、使用HttpURLConnection提交GET請求

//在分執行緒進行網路請求
new Thread(){

    public void run(){

            //UTF-8
            String path = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm"+
            "?tel=00012345678";



            try {

                //建立URL物件
                URL url = new URL(path);

                //得到HttpURLConnection物件
                HttpURLConnection connection = (HttpURLConnection)url.openConnection();

                //連線準備
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(6000);

                //開始連線伺服器
                connection.connect();


                //帶資料來請求資料
                if(connection.getResponseCode() == 200){
                        //200:代表請求OK



                        InputStream is = connection.getInputStream();       
                        //將InputStream轉化為String 
                        String result = HttpUtil.inputstream2String(is);
                        System.out.println(result);
                        //關閉輸入流
                        is.close();

                        //獲取到資料後在主執行緒更新UI runOnUiThread / handler

                    }

                    connection.disconnect();

            }catch(Exception e){

            }

        }

}.start();

三、使用HttpURLConnection提交POST請求

可以在其它api上測試POST請求。

//在分執行緒進行網路請求
new Thread(){

    public void run(){

            String path = "http://www.kd185.com/ems.php";



            try {

                //建立URL物件
                URL url = new URL(path);

                //得到HttpURLConnection物件
                HttpURLConnection connection = (HttpURLConnection)url.openConnection();

                //連線準備
                connection.setRequestMethod("POST");
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(6000);

                //設定連線是否可以用於輸入/輸出
                connection.setDoOutput(true);

                //開始連線伺服器
                connection.connect();

                //傳送請求的資料:連線後得到輸出流
                OutputStream os = connection.getOutputStream();
                String data = "wen=5011363267500&btnSearch=EMS快遞查詢";
                //將請求資料的字串轉換為byte陣列
                os.write(data.getBytes("utf-8"));

                //關閉輸出流
                os.flush();
                os.close();

                //帶資料來請求資料
                if(connection.getResponseCode() == 200){
                        //200:代表請求OK



                        InputStream is = connection.getInputStream();       
                        //將InputStream轉化為String (在此不贅述)
                        String result = HttpUtil.inputstream2String(is);
                        System.out.println(result);
                        //關閉輸入流
                        is.close();

                        //在主執行緒更新UI runOnUiThread / handler

                    }

                    connection.disconnect();

            }catch(Exception e){

            }

        }

}.start();

附 HttpUtil程式碼:

public class HttpUtil {

    public static String inputstream2String(InputStream is) throws Exception {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];

        int len = -1;
        while((len=is.read(buffer))!=-1){
            baos.write(buffer,0,len);
        }

        String result = baos.toString();

        return result;
    }

}

相關文章