之前在使用AsyncHttpClient的時候,遇到在Android6.0后找不到HttpClient的問題,后來官方更新了1.4.9版本替換了HttpClient為第三方的cz.msebera.android.httpclient。了解到Google在Android6.0后移除了HttpClient,推薦使用HttpUrlConnection實現(xiàn)http請求,并且許多其他第三方網(wǎng)絡(luò)請求框架都是改為以HttpUrlConnection為基礎(chǔ),故此認(rèn)為有必要熟悉一下其基本用法。
使用的流程:
1 | 創(chuàng)建URL對象 | URL url = new URL("http://qq.com"); |
2 | 實例化HttpUrlConnection對 | conn = (HttpURLConnection) url.openConnection(); |
3 | 設(shè)置請求的相關(guān)屬性,post傳值等 | conn.setRequestMethod("POST");conn.setDoOutput()等 |
4 | 獲取返回碼,判斷連接成功與否 | if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) |
5 | 讀取輸入流 | InputStream is = conn.getInputStream(); |
6 | 關(guān)閉連接、輸入流 | conn.disconnect(); is.close(); |
Get請求:
//HttpUrlConnection默認(rèn)就是Get請求,最簡單的情況下什么都不需要設(shè)置。
conn = (HttpURLConnection) url.openConnection();
InputStream is = conn.getInputStream();
Get請求示例代碼:
try { URL url = new URL("http://112.124.63.181/mm/Api/Public/timestamp"); conn = (HttpURLConnection) url.openConnection(); InputStream is = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sb.append(line); } showText(sb.toString()); } catch (IOException e) { e.printStackTrace(); }finally { if (conn != null){conn.disconnect();} if (reader != null){ try { reader.close(); } catch (IOException e) {e.printStackTrace();} } }
Post請求:
Post和Get的主要區(qū)別:
conn.setRequestMethod("POST");
conn.setDoOutput(true);//允許向服務(wù)器提交數(shù)據(jù)
conn.setUseCaches(false);//Post不是用緩存
String body ="password=e10adc3949ba59abbe56e057f20f883e&username=test3";
OutputStream os = conn.getOutputStream();
os.write(body.getBytes());
os.flush();
os.close();
InputStream is = conn.getInputStream();
...
提交數(shù)據(jù):
OutputStream os = conn.getOutputStream();
os.write(body.getBytes());
os.flush();
os.close();
直接使用低級字節(jié)流輸出String轉(zhuǎn)換后的字節(jié)數(shù)組。
DataOutputStream dos = new DataOutputStream(os);
OutputStreamWriter writer = new OutputStreamWriter(os);
BufferedWriter writer = new BufferedWriter(newOutputStreamWriter(os));
使用高級字符流可以相對比較方便地輸出字符串、文件等。
Post請求示例代碼:
String urlString = "http://120.77.156.236/mm/Api/Base/checkLogin"; String bodyString = "password=e10adc3949ba59abbe56e057f20f883e&username=test3"; URL url = new URL(urlString); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); OutputStream os = conn.getOutputStream(); os.write(bodyString.getBytes("utf-8")); os.flush(); os.close(); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream is = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sb.append(line); } return sb.toString(); }
常用設(shè)置方法:
// 設(shè)置請求方法,默認(rèn)是GET
conn.setRequestMethod("GET");
//設(shè)置連接服務(wù)器超時
conn.setConnectTimeout(8000);
//設(shè)置讀取服務(wù)器數(shù)據(jù)超時
conn.setReadTimeout(5000);
//設(shè)置是否使用緩存
conn.setUseCaches(true);
// 設(shè)置使用的字符集
conn.setRequestProperty("Charset","UTF-8");
// 設(shè)置內(nèi)容類型信息
conn.setRequestProperty("Content-Type","application/json");
// 設(shè)置自定義參數(shù)
conn.setRequestProperty("MyKey","MyValue");
//設(shè)置是否允許輸出,默認(rèn)為false,Post提交數(shù)據(jù)時必須為true
conn.setDoOutput
//設(shè)置是否允許輸入,默認(rèn)為true,這樣getInputStream才有值
conn.setDoInput
//設(shè)置每次傳輸?shù)牧鞔笮。乐故謾C內(nèi)存不足
conn.setChunkedStreamingMode(51200);
//開始連接,并不需要顯式調(diào)用,調(diào)用getInputStream或getResponseCode等方式時都會間接調(diào)用。
conn.connect();
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文名稱:HttpUrlConnection發(fā)送GET、POST請求-創(chuàng)新互聯(lián)
文章地址:http://aaarwkj.com/article12/coeggc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、品牌網(wǎng)站制作、網(wǎng)站營銷、網(wǎng)站內(nèi)鏈、App設(shè)計、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容