安卓使用 HTTP 协议访问网络
2019獨角獸企業重金招聘Python工程師標準>>>
10.2.1
使用
HttpURLConnection
1,首先需要獲取到 HttpURLConnection 的實例,一般只需 new 出一個 URL 對象,并傳入
目標的網絡地址,然后調用一下 openConnection()方法。
2,我們可以設置一下 HTTP 請求所使用的方法。
常用的方法主要有兩個, GET 和 POST。 GET 表示希望從服務器那里獲取數據,而 POST 則
表示希望提交數據給服務器。
3,接下來就可以進行一些自由的定制了,比如設置連接超時、讀取超時的毫秒數,以及服
務器希望得到的一些消息頭等。
4,之后再調用 getInputStream()方法就可以獲取到服務器返回的輸入流了,剩下的任務就是
對輸入流進行讀取,
5.
最后可以調用 disconnect()方法將這個 HTTP 連接關閉掉,
那么如果是想要提交數據給服務器應該怎么辦呢?其實也不復雜,只需要將 HTTP 請求
的方法改成 POST,并在獲取輸入流之前把要提交的數據寫出即可。注意每條數據都要以鍵
值對的形式存在,數據與數據之間用&符號隔開,比如說我們想要向服務器提交用戶名和密
碼,就可以這樣寫:
10.2.2 使用 HttpClient
1,HttpClient 是一個接口,因此無法創建它的實例,通常情況下都會創
建一個 DefaultHttpClient 的實例,如下所示:
HttpClient httpClient = new DefaultHttpClient();
2,接下來如果想要發起一條 GET 請求,就可以創建一個 HttpGet 對象,并傳入目標的網絡
地址,然后調用 HttpClient 的 execute()方法即可
?
HttpGet httpGet = new HttpGet("http://www.baidu.com");
httpClient.execute(httpGet);
如果是發起一條 POST 請求會比 GET 稍微復雜一點,我們需要創建一個 HttpPost 對象,
并傳入目標的網絡地址,如下所示:
HttpPost httpPost = new HttpPost("http://www.baidu.com");
然后通過一個 NameValuePair 集合來存放待提交的參數,并將這個參數集合傳入到一個
UrlEncodedFormEntity 中,然后調用 HttpPost 的 setEntity()方法將構建好的 UrlEncodedFormEntity
傳入,如下所示:
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", "admin"));
params.add(new BasicNameValuePair("password", "123456"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");
httpPost.setEntity(entity);
3,接下來的操作就和 HttpGet 一樣了,調用 HttpClient 的 execute()方法,并將 HttpPost 對
象傳入即可:
httpClient.execute(httpPost);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 請求和響應都成功了
}
4,
接下來在這個 if判斷的內部取出服務返回的具體內容,可以調用 getEntity()方法獲取到
一個 HttpEntity 實例,然后再用 EntityUtils.toString()這個靜態方法將 HttpEntity 轉換成字符串
即可,如下所示:
HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity);
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉載于:https://my.oschina.net/u/2480757/blog/517895
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的安卓使用 HTTP 协议访问网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git添加文件改动时出错
- 下一篇: Linux 在一个命令行上执行多个命令