發(fā)送Http請求

發(fā)送Http請求
1.HttpURLConnection
2.HttpCilent(API數(shù)量過多,擴(kuò)展困難孝鹊,不建議使用,6.0中已被移除)
3.OkHttp


  • HttpURLConnection
private void sendRequestWithHttpURLConnection(){
        //開啟子線程來發(fā)起網(wǎng)絡(luò)請求
        new Thread(new Runnable(){
            @Override
            public void run(){
                HttpURLConnection connection=null;
                BufferedReader reader=null;
                try{
                    //獲取HttpURLConnection實例
                    URL url=new URL("https://www.baidu.com");
                    connection=(HttpURLConnection)url.openConnection();
                    //設(shè)置HTTP請求使用的方法
                    connection.setRequestMethod("GET");
                    //其他設(shè)置
                    connection.setConnectTimeout(8000);
                    connection.setReadTimeout(8000);
                    //獲取服務(wù)器返回的輸入流
                    InputStream in=connection.getInputStream();

                    //讀取獲取到的輸入流
                    reader=new BufferedReader(new InputStreamReader(in));
                    StringBuilder response=new StringBuilder();
                    String line;
                    while((line=reader.readLine())!=null){
                        response.append(line);
                    }
                    showResponse(response.toString());

                }catch(Exception e){
                    e.printStackTrace();
                }finally {
                    if(reader!=null){
                        try{
                            reader.close();
                        }catch(IOException e){
                            e.printStackTrace();
                        }
                    }
                    if(connection!=null){
                        //關(guān)閉HTTP連接
                        connection.disconnect();
                    }
                }
            }
        }).start();
    }

網(wǎng)絡(luò)請求是很耗時的操作,所以要開啟子線程
首先要獲取HttpURLConnection實例,采用URL.openConnection()方法
設(shè)置Http請求所使用的方法吵聪,GET(從服務(wù)器獲取數(shù)據(jù)),POST(向服務(wù)器提交數(shù)據(jù))
還可設(shè)置鏈接超時兼雄,讀取超時毫秒數(shù)以及服務(wù)器希望得到的一下消息頭等
HttpURLConnection.getInputStream()方法獲取服務(wù)器返回的InputStream輸入流
對輸入流進(jìn)行讀取吟逝,最后關(guān)閉HTTP連接使用HttpURLConnection.disconnect()方法

//Android不允許在子線程中進(jìn)行UI操作,要用runOnUiThread方法切換到主線程
    private  void showResponse(final String response){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //在這里進(jìn)行UI操作
                mTextViewResponseText.setText(response);
            }
        });
    }

發(fā)送信息給服務(wù)器
把請求方法改成POST并在獲取輸入流之前把要提交的數(shù)據(jù)寫出

connection.setRequestMethod("POST");
DataOutputStream out=new DataOutputStream(connection.getOutputStream());
out.writeBytes("username=admin&password=123456");

注意每條數(shù)據(jù)都以鍵值對的形式存在赦肋,數(shù)據(jù)與數(shù)據(jù)之間用&隔開


  • OkHttp
private void sendRequestWithOkHttp(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    //創(chuàng)建OkHttpClient實例
                    OkHttpClient client=new OkHttpClient();
                    //Requst是OkHttp庫里的
                    //builder之前可連綴的方法還有很多
                    //10.0.2.2對于模擬器來說就是電腦本機(jī)的IP地址
                    Request request=new Request.Builder()
                            .url("http://10.0.2.2/get_data.json")
                            .build();
                    //創(chuàng)建call對象块攒,并調(diào)用它的execute方法來發(fā)送請求并獲取服務(wù)器返回的數(shù)據(jù)
                    Response response=client.newCall(request).execute();
                    String responseData=response.body().string();
                    //parseXMLWithPull(responseData);
                    //parserXMLWithSAX(responseData);
                    //parseJSONWithJSONObject(responseData);
                    parserJSONWithGSON(responseData);
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }).start();
    }

創(chuàng)建OkHttpClient實例
創(chuàng)建Request實例,并在此時傳入url
利用OkHttpClient.newCall()方法傳入Request對象來創(chuàng)建call對象
調(diào)用call對象的execute()方法來發(fā)送請求并獲取服務(wù)器返回的數(shù)據(jù)Response對象
調(diào)用Response.body().string可將返回的數(shù)據(jù)轉(zhuǎn)換成string佃乘,在把它送去解析


發(fā)送信息給服務(wù)器
構(gòu)建RequestBody對象用來存放待提交的參數(shù)

RequestBody requestBody=new FormBody.Builder()
                .add("username","admin")
                .add("password","123456")
                .build();

調(diào)用Request.Builder中的post()方法傳入RequestBody對象

Request request=new Request.Builder()
          .url("http://www.baidu.com")
          .post(requestBody)
          .builder();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囱井,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子趣避,更是在濱河造成了極大的恐慌庞呕,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異住练,居然都是意外死亡地啰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門讲逛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來髓绽,“玉大人,你說我怎么就攤上這事妆绞∷撑唬” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵括饶,是天一觀的道長株茶。 經(jīng)常有香客問我,道長图焰,這世上最難降的妖魔是什么启盛? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮技羔,結(jié)果婚禮上僵闯,老公的妹妹穿的比我還像新娘。我一直安慰自己藤滥,他們只是感情好鳖粟,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拙绊,像睡著了一般向图。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上标沪,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天榄攀,我揣著相機(jī)與錄音,去河邊找鬼金句。 笑死檩赢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的违寞。 我是一名探鬼主播贞瞒,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坞靶!你這毒婦竟也來了憔狞?” 一聲冷哼從身側(cè)響起蝴悉,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤彰阴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拍冠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尿这,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡簇抵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了射众。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碟摆。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叨橱,靈堂內(nèi)的尸體忽然破棺而出典蜕,到底是詐尸還是另有隱情,我是刑警寧澤罗洗,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布愉舔,位于F島的核電站,受9級特大地震影響伙菜,放射性物質(zhì)發(fā)生泄漏轩缤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一贩绕、第九天 我趴在偏房一處隱蔽的房頂上張望火的。 院中可真熱鬧,春花似錦淑倾、人聲如沸馏鹤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽假瞬。三九已至,卻和暖如春迂尝,著一層夾襖步出監(jiān)牢的瞬間脱茉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工垄开, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留琴许,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓溉躲,卻偏偏與公主長得像榜田,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锻梳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理箭券,服務(wù)發(fā)現(xiàn),斷路器疑枯,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 一辩块、 生成HTTP請求消息 1.1 各種各樣的URL瀏覽器是一個具備多種客戶端功能的綜合性客戶端軟件,會根據(jù)UR...
    gioxx2閱讀 6,267評論 1 8
  • 參考Android網(wǎng)絡(luò)請求心路歷程Android Http接地氣網(wǎng)絡(luò)請求(HttpURLConnection) 一...
    合肥黑閱讀 21,234評論 7 63
  • 大家好,我是IT修真院深圳分院第01期學(xué)員废亭,一枚正直純潔善良的web程序員国章。今天給大家分享一下,修真院官網(wǎng)JAVA...
    老菜菜閱讀 27,837評論 0 3
  • 這幾天北京一直在下雨豆村,嘩嘩的液兽,大水漫灌毫不夸張的說。天氣涼爽的很掌动,睡覺也變得開心愉快四啰。感覺頭腦也清晰了不少,哈哈粗恢。...
    LubQ閱讀 216評論 2 0