涉及的類有一下幾個: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,其他步驟與上面③傳遞參數一致