網路處理2 非同步POST請求和同步請求

2022-09-17 05:54:16 字數 3351 閱讀 1646

本文目錄

上一講介紹了ios中的非同步get請求,這講來看看非同步post請求。

回到頂部

假如請求路徑是請求引數有2個:

要想在ios中傳送乙個post請求,首先要了解post請求的一些細節:

1> 跟get請求不一樣的是,post請求的請求引數不是拼接在請求路徑後面,而是以請求體的形式傳送到伺服器端。

2> post請求需要傳送兩部分的資料到伺服器端:

* 請求體內容:所有的請求引數

username=%e6%af%8d%e9%b8%a1&pwd=123
中文引數需要進行編碼,引數"母雞"被編碼成"%e6%af%8d%e9%b8%a1"

* 請求頭資訊:請求體長度、請求資料的型別

(這是我在firebug中模擬post請求的截圖)

content-length是指請求體長度,content-type是指請求資料型別

1 // 請求位址

2 nsstring *urlstring = @"";

3 // 初始化乙個nsurl物件

4 nsurl *url = [nsurl urlwithstring:urlstring];

5 6 // 初始化乙個請求

7 nsmutableurlrequest *request = [nsmutableurlrequest requestwithurl:url];

8 // 設定請求方法

10 // 60秒請求超時

11 request.timeoutinterval = 60;

12 13 // 拼接請求引數

14 nsstring *params = @"username=母雞&pwd=123";

15 // 對字串進行編碼後轉成nsdata物件

16 nsdata *data = [params datausingencoding:nsutf8stringencoding];

17 // 設定請求體

19 20 // 設定請求頭資訊-請求體長度

23 // 設定請求頭資訊-請求資料型別

25 26 // 初始化乙個連線

27 nsurlconnection *conn = [nsurlconnection connectionwithrequest:request delegate:self];

28 // 開始乙個非同步請求

29 [conn start];

1> 在18行設定了請求體內容

2> 從第21~24行設定了請求頭資訊

3> 其實,第21~24行**可以省略。只要我們在第18行設定了請求體,系統在傳送post請求時,會自動根據請求體內容加上相應的請求頭資訊

回到頂部

除了start方法,nsurlconnection還提供了2個靜態方法幫助我們傳送http請求

1 // 請求位址

2 nsstring *urlstring = @"?username=123&pwd=123";

3 // 初始化乙個nsurl物件

4 nsurl *url = [nsurl urlwithstring:urlstring];

5 6 // 初始化乙個請求

7 nsurlrequest *request = [nsurlrequest requestwithurl:url];

8 9 // 初始化乙個操作佇列

10 nsoperationqueue *queue = [[[nsoperationqueue alloc] init] autorelease];

11 // 傳送乙個非同步請求

12 [nsurlconnection sendasynchronousrequest:request queue:queue completionhandler:

13 ^(nsurlresponse *response, nsdata *data, nserror *error) ];

在12行呼叫sendasynchronousrequest:queue:completionhandler:方法傳送乙個非同步http請求,這個方法接收3個引數

* 第1個引數是乙個nsurlrequest物件,封裝的是乙個get請求

* 第3個引數是乙個block,當伺服器成功返回資料時會**這個block,block中的nsdata *data引數就是伺服器返回的資料

* 第2個引數是乙個操作佇列nsoperationqueue,當伺服器成功返回資料時,系統會將第3個引數中傳入的block放到這個操作佇列中執行

前面說的都是非同步請求,也是比較推薦的請求方式。nsurlconnection也提供了乙個靜態方法可以傳送乙個同步請求。

1 // 請求位址

2 nsstring *urlstring = @"?username=123&pwd=123";

3 // 初始化乙個nsurl物件

4 nsurl *url = [nsurl urlwithstring:urlstring];

5 6 // 初始化乙個請求

7 nsurlrequest *request = [nsurlrequest requestwithurl:url];

8 9 // 傳送乙個同步請求

10 nsdata *data = [nsurlconnection sendsynchronousrequest:request returningresponse:nil error:nil];

11 12 // 解析成字串資料

13 nsstring *str = [[[nsstring alloc] initwithdata:data encoding:nsutf8stringencoding] autorelease];

14 nslog(@"%@", str);

在第10行呼叫了sendsynchronousrequest:returningresponse:error:方法傳送了乙個同步請求,這是乙個阻塞式的方法,也就是等伺服器返回所有資料後,這個方法才會返回,返回值是乙個nsdata物件,存放著伺服器返回的所有資料

原作者,m了個j

IOS 處理 GET請求和POST請求

get和post是兩種最常用的與伺服器進行互動的http方法 get的語義是獲取指定的url資源,將資料按照 variable value 的形式,新增到action所指向的url後面,並且兩者使用 連線,各變數之間使用 連線 對使用者來說不安全,因為在傳輸過程中,資料被放在請求的url中.傳輸的資...

POST和GET以及同步請求和非同步請求的區別

一 http是應用層的網路傳輸協議,對於http的請求方式主要流行的get請求與post請求對於get請求與post請求的區別 1.get請求,伺服器以及引數都會出現在請求介面中,也就是請求引數也是介面的一部分,而post請求在介面中只有伺服器位址,而引數會作為請求提交給伺服器。2.因為get請求會...

網路相關 get請求和post請求的區別

前言 我們在後台開發的時候,和前端互動離不開介面,也就是離不開get和post請求,這兩個都是獲取資料,但是在什麼場合使用呢?下面我們就來看一看。post 傳送 提交。可以向指定的資源提交要被處理的資料。而post請求過程中,先發乙個請求頭,伺服器會先響應一次,然後瀏覽器再傳送一次請求過程中會將正文...