本文目錄
上一講介紹了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 // 請求位址1> 在18行設定了請求體內容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];
2> 從第21~24行設定了請求頭資訊
3> 其實,第21~24行**可以省略。只要我們在第18行設定了請求體,系統在傳送post請求時,會自動根據請求體內容加上相應的請求頭資訊
回到頂部
除了start方法,nsurlconnection還提供了2個靜態方法幫助我們傳送http請求
1 // 請求位址在12行呼叫sendasynchronousrequest:queue:completionhandler:方法傳送乙個非同步http請求,這個方法接收3個引數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) ];
* 第1個引數是乙個nsurlrequest物件,封裝的是乙個get請求
* 第3個引數是乙個block,當伺服器成功返回資料時會**這個block,block中的nsdata *data引數就是伺服器返回的資料
* 第2個引數是乙個操作佇列nsoperationqueue,當伺服器成功返回資料時,系統會將第3個引數中傳入的block放到這個操作佇列中執行
前面說的都是非同步請求,也是比較推薦的請求方式。nsurlconnection也提供了乙個靜態方法可以傳送乙個同步請求。
1 // 請求位址在第10行呼叫了sendsynchronousrequest:returningresponse:error:方法傳送了乙個同步請求,這是乙個阻塞式的方法,也就是等伺服器返回所有資料後,這個方法才會返回,返回值是乙個nsdata物件,存放著伺服器返回的所有資料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);
原作者,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請求過程中,先發乙個請求頭,伺服器會先響應一次,然後瀏覽器再傳送一次請求過程中會將正文...