国产探花免费观看_亚洲丰满少妇自慰呻吟_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];

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九龙城区| 安庆市| 桂阳县| 仁寿县| 鲁山县| 鸡西市| 绵阳市| 雷州市| 吉安市| 汉沽区| 仪陇县| 宁德市| 长治市| 江门市| 苍溪县| 平果县| 康马县| 宁国市| 渝北区| 盐亭县| 资兴市| 昌都县| 海口市| 尉氏县| 集安市| 宁城县| 隆子县| 大宁县| 志丹县| 内乡县| 南华县| 承德县| 海盐县| 南靖县| 封开县| 大悟县| 清河县| 剑阁县| 嘉义县| 博爱县| 喀什市|