国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS-NSURLConnection網絡請求,與服務器交互的請求注意點和實現方式

2019-11-14 18:32:56
字體:
來源:轉載
供稿:網友

NSURLConnection

前面我們學習過了多線程的諸多知識,現在該學習網絡,學習網絡少不了的是發送網絡請求,跟服務器進行交互。在iOS中,發送網絡請求可以使用NSURLConnection類

使用步驟:


1、創建一個NSURL對象,設置請求路徑

這沒什么好說的,我們可以將字符串變成URL,也可以直接設置URL,例如:

//這里對字符串進行的處理是因為URL里面不支持中文,而進行的百分號變換,將中文變成百分號格式NSString *urlStr = [@"http://120.25.226.186:32812/login?username=123&pwd=123" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlStr];

2、傳入NSURL創建一個NSURLRequest對象,設置請求頭和請求體等

可以直接設置請求對象,用NSURLRequest,但是這樣不能對請求進行更細致的設置

NSURLRequest *request = [NSURLRequest requestWithURL:url];

要進行更細致的設置,如請求方式,請求頭等的設置,只能使用NSURLRequest的子類NSMutableURLRequest:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";// 請求體NSString *bodyStr = @"username=123&pwd=123";request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];

我們一共可以設置的請求屬性如下表示:

設置請求超時等待時間(超過這個時間就算超時,請求失敗)- (void)setTimeoutInterval:(NSTimeInterval)seconds;設置請求方法(比如GET和POST)- (void)setHTTPMethod:(NSString *)method;設置請求體- (void)setHTTPBody:(NSData *)data;設置請求頭- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;

####3、使用NSURLConnection發送請求(2種方式,各有不同)

3.1發送同步請求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;

參數:

  • 第一個參數: NSURLRequest,包含了需要請求的地址, 以及請求頭
  • 第二個參數: 當服務器返回數據之后, 就會將數據賦值給第二個參數(響應頭)
  • 第三個參數: 錯誤信息

特點:

  • 會阻塞主線程,會返回數據給NSURLConnection,默認是GET請求

3.2異步請求

根據對服務器返回數據的處理方式的不同,又可以分為2種

1、block回調方式的異步

+ (void)sendAsynchronousRequest:(NSURLRequest*) request queue:(NSOperationQueue*) queue completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;

2、代理的方式異步

- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;+ (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately;

在startImmediately = NO的情況下,需要調用start方法開始發送請求

- (void)start;

成為NSURLConnection的代理,要遵守NSURLConnectionDataDelegate協議

NSURLConnectionDataDelegate協議中的代理方法

開始接收到服務器的響應時調用- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;接收到服務器返回的數據時調用(服務器返回的數據比較大時會調用多次)- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;服務器返回的數據完全接收完畢后調用- (void)connectionDidFinishLoading:(NSURLConnection *)connection;請求出錯時調用(比如請求超時)- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;

創建GET和POST請求的舉例,

創建GET請求NSString *urlStr = [@"http://120.25.226.186:32812/login?username=123&pwd=123" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlStr];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];創建POST請求NSString *urlStr = @"http://120.25.226.186:32812/login";NSURL *url = [NSURL URLWithString:urlStr];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";// 請求體NSString *bodyStr = @"username=123&pwd=123";request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];

注意:

  • URL中不能包含中文, 如果包含中文會報錯
  • 如果URL中包含中文, 需要對URL中百分號編碼

例如:

NSString *urlStr = @"http://120.25.226.186:32812/login2?username=小黃人&pwd=520it&type=JSON";urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlStr];

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江都市| 临邑县| 泉州市| 县级市| 察隅县| 偏关县| 林芝县| 镇宁| 重庆市| 邛崃市| 恭城| 璧山县| 惠州市| 达州市| 孟州市| 山西省| 弥渡县| 如皋市| 黄龙县| 长葛市| 珠海市| 剑川县| 班戈县| 阿尔山市| 冕宁县| 丘北县| 若羌县| 永清县| 密云县| 界首市| 安远县| 肥城市| 泰宁县| 沂源县| 蒲城县| 富川| 昭苏县| 崇文区| 乌鲁木齐市| 武穴市| 武穴市|