Android —— HTTP編程

涉及的類有一下幾個:URL、URLConnection、HTTPURLConnection

一、URL,利用該類我們可以獲取網絡資源。如:獲取網頁源代碼、網頁圖片等等。

例如:http://www:*****.com/china/index.html

(1)協議名:http://

(2)萬維網服務器:www:

(3)裝有網頁服務器的域名或站點服務器的名稱:*****.com

(4)訪問在服務器上的路徑:/china/

(5)訪問的內容:index.html

①URL是互聯網上的“資源”的唯一地址標識,它由協議名、主機、端口和資源組成。我們通過URL類來獲取這些相關的屬性。

                                                URL類的常用方法

Public String getProtocol() 獲取URL的協議名                                  
Public String getHost()  獲取URL的主機名
Public String getPort() 獲取URL的端口號
Public String getFile() 獲取URL的文件名
Public String getPath() 獲取URL的路徑
Public String getAuthority() 獲取URL的權限信息
Public String getQuery() 獲取URL的查詢字符串部分
Public final Object getContent()

獲取URL的內容 

②通過URL類獲取網頁內容的步驟

(1)先實例化一個URL對象   

          URL url = new URL("http://www.sohu.com") 

(2)利用Public final InputStream openStream()打開URL的連接,再利用InputStreamReader()接收

         InputStreamReader inSr = new InputStreamReader(url.openStream();

(3)再構造一個BuffererReader()對象獲取資源(如要對網頁資源進行解析,則需要使用URI類)

         BufferReader br = new BufferReader(inSr);

         String str  = br.readLine();

二、URLConnection,利用該類我們可以傳遞HTTP的消息頭,對它可以上傳參數。可以完成一些刪除、查找等功能的應用

       不過實現這些操作常用它的子類HTTPURLConnection類。

①URLConnection是抽象類,是實現應用程序和URL之間通信連接的所有類的超類,該類的對象可以對URL所指定的資源進行讀寫操作

                             URLConnection常用的訪問方法

Public abstract void connect() 建立到此URL引用的資源的通信連接                   
Public Object getConnect() 獲取URL連接的內容
Public InputStream getInputStream() 返回打開連接的輸入流
Public OutputStream getOutputStream() 返回打開鏈接的輸出流
Public String getConnectionEncoding 返回content-encoding頭字段的值
Public int getContentLength() 返回content-length頭字段的值
Public String getContentType() 返回content-type頭字段的值
Public long getExpiration() 返回expres頭字段的值
Public long getDate() 返回date頭字段的值

     

三、HttpURLConnection、利用該類獲取網頁內容、文件、向網頁發送請求參數以及發送XML數據

  通過HTTPURLConnection類獲取網頁內容的步驟

(1)創建一個URL對象

       URL url = new URL("http://www.sohu.com") ;

(2)得到HTTPURLConnection對象

       HTTPURLConnection con = (HttpURLConnection)url.openConnection();

(3)設置超時連接

       con.setConnectTimeout(6000);

(4)對響應碼進行判斷

       if(con.getResponseCode() != 200) throw new RuntimeException("請求失敗");

(5)得到網絡返回的收入流

       InputStream is = con.getInputStream();

       String result = readDate(is,"GBK");

       con.disconnection();

注:設置超時連接的好處,如果網絡不好,Android 系統會在超時默認時間後悔回收資源,在步驟(5)中獲取網頁內容還有考            慮該網頁的具體編碼格式。

相關案例:https://blog.csdn.net/weixin_43917449/article/details/85368864

②獲取網頁文件的步驟

   如獲取網頁內容的形式類似,在定位的時候要指定其文件的URL地址,接受時要根據文件的類型將其解析。

③向網頁發送請求參數的步驟

(1)將請求參數儲存到byte數組中

       String para  = new String("username = admin&password = admin");

       byte[ ] data  = para.getBytes();

(2)建立URL連接對象

       URL url = new URL("http://www.sohu.com") ;

(3)獲得HTTPURLConnection對象

       HTTPURLConnection con = (HttpURLConnection)url.openConnection();

(4)設置允許輸出

      con.setDoput(true);

(5)設置不使用緩存

       con,setUerCaches(false);

(6)設置使用Post方式發送

       con.setRequestMethod("POST")

(7)設置維持長度連接

       con.setRequestProperty("Connection","Keep - Alive");

(8)設置文件字符集

        con.setRequestProperty("Charset","UTF - 8");

(9)設置文件長度

        con.setRequestProperty("Content - Length",String.valueOf(data.length));

(10)設置文件類型

        con.setRequestProperty("Content - Type","application/x -www - from - urlencoded");

(11)最後一個流的方式輸出

         con.getOutoutStrem().write(data);

注:使用POST請求必須設置允許輸出,建議不要是用緩存,避免出現不該出現的問題,避免出現不該出現的問題。同時只有設置Content-Type爲application/x-www-form-urlencoded,服務器纔可以直接使用request.getParameter("username")接受所需的信息。

相關案例:https://www.jb51.net/article/125699.htm

④向Intent發送XML數據

(1)將生成的XML問價寫入byte 數組中同時設置UTF-8,其他步驟與上面③傳遞參數一致

 

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