2018-07-18Http協(xié)議訪問網(wǎng)絡

Http協(xié)議工作原理 :

客戶端向服務器端發(fā)送一條HTTP請求,服務器收到請求之后會返回一些數(shù)據(jù)給客戶端臼婆,然后客戶端再對這些返回的數(shù)據(jù)進行解析和處理

手動發(fā)送Http請求(發(fā)送部分)

1.使用HttpURLConnection

首先要獲取到一個HTTPURLConnection實例缸沃,先new出一個URL對象恰起,

URL url = new URL("www.baidu.com") //傳入目標網(wǎng)站的網(wǎng)絡地址

然后再調(diào)用openConnection()方法,結合起來的寫法是

HttpURLConnection connection? = ? (HttpURLConnection) url.openConnection;

得到HttpURLConnection實例之后和泌,我們可以設置一些關于Http請求的方法村缸,常用的方法選擇有兩個

1.GET? //希望從服務器獲取數(shù)據(jù)

2. POST ? / /希望提交數(shù)據(jù)給服務器

調(diào)用方式為? connection.setRequestMethod("GET")

當然還可以對Http請求做一些自由的定制

例如顯示連接超時和讀取超時的秒數(shù)

connection.setConnectTimeout(5000);

connection.setReadTimeout(5000);

接收讀取服務器返回的輸入流

調(diào)用getInputStream()方法獲取服務器返回的輸入流

InputStream in = connection.getInputStream();


關閉Http

最后調(diào)用disconnection()方法把Http連接關掉

connection.disconnection;

下面簡單講一個發(fā)送Http請求并接受服務器返回的數(shù)據(jù)小例子

2.使用OkHttp

在使用OkHttp之前,先要在build.gradle添加依賴庫

compile 'com.squareup.okhttp3:okhttp:3.4.1' //后面的3.4.1是okhttp的版本號

接下來來看OkHttp的具體用法

首先創(chuàng)建一個OkHttpClient 實例

OkHttpClient client = new OkHttpClient();

然后創(chuàng)Request對象

Request request = new Request.Builder.url("http://www.baidu.com").build();

之后調(diào)用OkHttpClient的newCall()方法創(chuàng)建一個Call對象武氓,并調(diào)用execute()方法

Response response = client.newCall(request).execute();

Response 的對象 response 就是服務器返回的數(shù)據(jù)

但是我們要得到具體的內(nèi)容梯皿,這樣寫

String responseData = response.body().string();

例子如下

public class MainActivityextends AppCompatActivityimplements View.OnClickListener {

TextViewresponseText;

? ? @Override

? ? protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_main);

? ? ? ? Button sendRequest = (Button) findViewById(R.id.send_request);

? ? ? ? responseText = (TextView) findViewById(R.id.response_text);

? ? ? ? sendRequest.setOnClickListener(this);

? ? }

@Override

? ? public void onClick(View v) {

if (v.getId() == R.id.send_request) {

//在Send Request按鈕的點擊事件中調(diào)用了sendRequestWithHttpURLConnection();方法

? ? ? ? ? ? sendRequestWithOkHttp();

? ? ? ? }

}

private void sendRequestWithOkHttp() {

//開啟線程來發(fā)送網(wǎng)絡請求

? ? ? ? new Thread(new Runnable() {

@Override

? ? ? ? ? ? public void run() {//先開啟一個子線程

? ? ? ? ? ? ? ? try {

//使用OkHttp

? ? ? ? ? ? ? ? ? ? OkHttpClient client =new OkHttpClient(); //創(chuàng)建一個OkHttpClient對象

? ? ? ? ? ? ? ? ? ? Request request =new Request.Builder().url("http://www.baidu.com").build(); //創(chuàng)建一個Request對象并且調(diào)用Builder().url()

? ? ? ? ? ? ? ? ? ? Response response = client.newCall(request).execute();? //使用client對象來調(diào)用newCall()方法獲取服務器返回的數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? String responseData = response.body().string();

? ? ? ? ? ? ? ? ? ? showResponse(responseData);

? ? ? ? ? ? ? ? }catch (Exception e) {

e.printStackTrace();

? ? ? ? ? ? ? ? }

}

}).start();

? ? }

private void showResponse(final String response) {

//將子線程切換為主線程

//android是不允許在子線程進行UI操作的

? ? ? ? runOnUiThread(new Runnable() {

@Override

? ? ? ? ? ? public void run() {

//在這里進行UI操作,將結果顯示在頁面上

? ? ? ? ? ? ? ? responseText.setText(response);

? ? ? ? ? ? }

});

? ? }

}

最后就是請求網(wǎng)絡權限了

<use-permission android:name = "android.permission.INTERNET"/>

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市县恕,隨后出現(xiàn)的幾起案子东羹,更是在濱河造成了極大的恐慌,老刑警劉巖忠烛,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件属提,死亡現(xiàn)場離奇詭異,居然都是意外死亡美尸,警方通過查閱死者的電腦和手機冤议,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來师坎,“玉大人恕酸,你說我怎么就攤上這事】杪” “怎么了蕊温?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵袱箱,是天一觀的道長。 經(jīng)常有香客問我义矛,道長发笔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任凉翻,我火速辦了婚禮了讨,結果婚禮上,老公的妹妹穿的比我還像新娘噪矛。我一直安慰自己量蕊,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布艇挨。 她就那樣靜靜地躺著残炮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缩滨。 梳的紋絲不亂的頭發(fā)上势就,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音脉漏,去河邊找鬼苞冯。 笑死,一個胖子當著我的面吹牛侧巨,可吹牛的內(nèi)容都是我干的舅锄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼司忱,長吁一口氣:“原來是場噩夢啊……” “哼皇忿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坦仍,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鳍烁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后繁扎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幔荒,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年梳玫,在試婚紗的時候發(fā)現(xiàn)自己被綠了爹梁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡提澎,死狀恐怖卫键,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虱朵,我是刑警寧澤莉炉,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站碴犬,受9級特大地震影響絮宁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜服协,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一绍昂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偿荷,春花似錦窘游、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寺庄,卻和暖如春艾蓝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背斗塘。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工赢织, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人馍盟。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓于置,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贞岭。 傳聞我的和親對象是個殘疾皇子八毯,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)曹步,斷路器宪彩,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 6.1 公鑰密鑰加密原理 6.1.1 基礎知識 密鑰:一般就是一個字符串或數(shù)字,在加密或者解密時傳遞給加密/解密算...
    AndroidMaster閱讀 4,011評論 1 8
  • 這篇文章主要講 Android 網(wǎng)絡請求時所使用到的各個請求庫的關系讲婚,以及 OkHttp3 的介紹尿孔。(如理解有誤,...
    小莊bb閱讀 1,159評論 0 4
  • 參考Android網(wǎng)絡請求心路歷程Android Http接地氣網(wǎng)絡請求(HttpURLConnection) 一...
    合肥黑閱讀 21,276評論 7 63
  • 如果忠于自己筹麸,多半都會選對活合;但如果一直很在意別人的想法,就很容易迷失物赶。這是這幾年一直很喜歡的一段文字白指。無論...
    歐尼snow閱讀 121評論 0 1