HttpUrlConnection發(fā)送GET、POST請(qǐng)求-創(chuàng)新互聯(lián)

之前在使用AsyncHttpClient的時(shí)候,遇到在Android6.0后找不到HttpClient的問題,后來官方更新了1.4.9版本替換了HttpClient為第三方的cz.msebera.android.httpclient。了解到Google在Android6.0后移除了HttpClient,推薦使用HttpUrlConnection實(shí)現(xiàn)http請(qǐng)求,并且許多其他第三方網(wǎng)絡(luò)請(qǐng)求框架都是改為以HttpUrlConnection為基礎(chǔ),故此認(rèn)為有必要熟悉一下其基本用法。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比萬榮網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式萬榮網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋萬榮地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

使用的流程:

1

創(chuàng)建URL對(duì)象

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

2

實(shí)例化HttpUrlConnection對(duì)

conn = (HttpURLConnection) url.openConnection();

3

設(shè)置請(qǐng)求的相關(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請(qǐng)求:

//HttpUrlConnection默認(rèn)就是Get請(qǐng)求,最簡(jiǎn)單的情況下什么都不需要設(shè)置。

conn = (HttpURLConnection) url.openConnection();

InputStream is = conn.getInputStream();

Get請(qǐng)求示例代碼:

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請(qǐng)求:

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();

直接使用低級(jí)字節(jié)流輸出String轉(zhuǎn)換后的字節(jié)數(shù)組。

DataOutputStream dos = new DataOutputStream(os);

OutputStreamWriter writer = new OutputStreamWriter(os);

BufferedWriter writer = new BufferedWriter(newOutputStreamWriter(os));

使用高級(jí)字符流可以相對(duì)比較方便地輸出字符串、文件等。

Post請(qǐng)求示例代碼:

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è)置請(qǐng)求方法,默認(rèn)是GET

conn.setRequestMethod("GET");

//設(shè)置連接服務(wù)器超時(shí)

conn.setConnectTimeout(8000);

//設(shè)置讀取服務(wù)器數(shù)據(jù)超時(shí)

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ù)時(shí)必須為true

conn.setDoOutput

//設(shè)置是否允許輸入,默認(rèn)為true,這樣getInputStream才有值

conn.setDoInput

//設(shè)置每次傳輸?shù)牧鞔笮?,防止手機(jī)內(nèi)存不足

conn.setChunkedStreamingMode(51200);

//開始連接,并不需要顯式調(diào)用,調(diào)用getInputStream或getResponseCode等方式時(shí)都會(huì)間接調(diào)用。

conn.connect();

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文名稱:HttpUrlConnection發(fā)送GET、POST請(qǐng)求-創(chuàng)新互聯(lián)
文章地址:http://muchs.cn/article12/coeggc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、品牌網(wǎng)站制作、網(wǎng)站營(yíng)銷網(wǎng)站內(nèi)鏈、App設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)