關於請求的常見方法/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];