ios 關於NSURLConnection

關於請求的常見方法/NSURLConnection(iOS9已過期)

該文章鏈接地址:     http://www.jianshu.com/p/3cb03842ec0e

HTTP請求的常見方法


GET 請求 -

  • 所有參數拼接在URL後面,並且參數之間用&隔開
  • 沒有請求體
  • 一般用來查詢數據
     - 比如http://cwz.com?name=123&pwd=345
     - 傳遞了2個參數給服務器
         - name參數:123
         - pwd參數:345

創建HTTP請求代碼

// 請求路徑
NSString *urlString = @"http://cwz.com?name=張三&pwd=123";
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// 創建URL
NSURL *url = [NSURL URLWithString:urlString];

// 創建請求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// 設置請求方法(默認就是GET請求,可以不設置)
request.HTTPMethod = @"GET";

POST請求 -

  • 所有參數都放在請求體
  • 一般用來修改、增加、刪除數據

POST請求

// 請求路徑
NSString *urlString = @"http://cwz.com/圖片";
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// 創建URL
NSURL *url = [NSURL URLWithString:urlString];

// 創建請求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// 設置請求方法
request.HTTPMethod = @"POST";

// 設置請求體
request.HTTPBody = [@"name=張三&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];

使用NSURLConnection發送HTTP請求


發送同步請求

// 這個方法是阻塞式的,會在當前線程發送請求
// 當服務器的數據完全返回時,這個方法纔會返回,代碼纔會繼續往下執行
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;

發送異步請求-block

// 會自動開啓一個子線程去發送請求
// 當請求完畢(成功\失敗),會自動調用handler這個block
// handler這個block會放到queue這個隊列中執行
+ (void)sendAsynchronousRequest:(NSURLRequest*) request
                          queue:(NSOperationQueue*) queue
              completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;

發送異步請求-delegate

- 創建NSURLConnection對象
// startImmediately==YES,創建完畢後,自動發送異步請求
- (instancetype)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately;

// 創建完畢後,自動發送異步請求
- (instancetype)initWithRequest:(NSURLRequest *)request delegate:(id)delegate; 

// 創建完畢後,自動發送異步請求
+ (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;

發送請求

[connection start];
  • 遵守NSURLConnectionDataDelegate協議,實現協議中的代理方法
// 當接收到服務器的響應時就會調用
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;

// 每當接收到服務器返回的數據時就會調用1次(數據量大的時候,這個方法就會被調用多次)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;

// 當服務器的數據完全返回時調用(服務器的數據接收完畢)
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;

// 當請求失敗的時候調用
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;

取消請求

[connection cancel];

NSString和NSData的互相轉換

  • NSString -> NSData
NSData *data = [@"cwz.com" dataUsingEncoding:NSUTF8StringEncoding];
  • NSData -> NSString
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章