常用類(lèi)
NSURL:請(qǐng)求地址
NSURLRequest:一個(gè)NSURLRequest對(duì)象就代表一個(gè)請(qǐng)求,它包含的信息有
一個(gè)NSURL對(duì)象
請(qǐng)求方法膛薛、請(qǐng)求頭圣猎、請(qǐng)求體
請(qǐng)求超時(shí)
… …NSMutableURLRequest:NSURLRequest的子類(lèi)
NSURLConnection
負(fù)責(zé)發(fā)送請(qǐng)求,建立客戶(hù)端和服務(wù)器的連接
發(fā)送數(shù)據(jù)給服務(wù)器,并收集來(lái)自服務(wù)器的響應(yīng)數(shù)據(jù)
NSURLConnection的使用步驟
- 使用NSURLConnection發(fā)送請(qǐng)求的步驟很簡(jiǎn)單
創(chuàng)建一個(gè)NSURL對(duì)象落塑,設(shè)置請(qǐng)求路徑
傳入NSURL創(chuàng)建一個(gè)NSURLRequest對(duì)象,設(shè)置請(qǐng)求頭和請(qǐng)求體
使用NSURLConnection發(fā)送請(qǐng)求
NSURLConnection發(fā)送請(qǐng)求
NSURLConnection常見(jiàn)的發(fā)送請(qǐng)求方法有以下幾種
同步請(qǐng)求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;異步請(qǐng)求:根據(jù)對(duì)服務(wù)器返回?cái)?shù)據(jù)的處理方式的不同枚冗,又可以分為2種
block回調(diào)
+ (void)sendAsynchronousRequest:(NSURLRequest)request
queue:(NSOperationQueue) queue
completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;
- 代理
- (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的情況下缓溅,需要調(diào)用start方法開(kāi)始發(fā)送請(qǐng)求
- (void)start;
- 成為NSURLConnection的代理坛怪,最好遵守NSURLConnectionDataDelegate協(xié)議
NSURLConnectionDelegate
NSURLConnectionDataDelegate協(xié)議中的代理方法
開(kāi)始接收到服務(wù)器的響應(yīng)時(shí)調(diào)用
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;-
接收到服務(wù)器返回的數(shù)據(jù)時(shí)調(diào)用(服務(wù)器返回的數(shù)據(jù)比較大時(shí)會(huì)調(diào)用多次)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
-
服務(wù)器返回的數(shù)據(jù)完全接收完畢后調(diào)用
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
請(qǐng)求出錯(cuò)時(shí)調(diào)用(比如請(qǐng)求超時(shí))
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
NSMutableURLRequest
NSMutableURLRequest是NSURLRequest的子類(lèi)待牵,常用方法有
設(shè)置請(qǐng)求超時(shí)等待時(shí)間(超過(guò)這個(gè)時(shí)間就算超時(shí)贰拿,請(qǐng)求失敱×稀)
- (void)setTimeoutInterval:(NSTimeInterval)seconds;設(shè)置請(qǐng)求方法(比如GET和POST)
- (void)setHTTPMethod:(NSString *)method;設(shè)置請(qǐng)求體
- (void)setHTTPBody:(NSData *)data;設(shè)置請(qǐng)求頭
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
創(chuàng)建GET和POST請(qǐng)求
創(chuàng)建GET請(qǐng)求
NSString urlStr = [@"http:://...:/?******=&=***" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];創(chuàng)建POST請(qǐng)求
NSString urlStr = @"http://...:/login";
NSURL url = [NSURL URLWithString:urlStr];
NSMutableURLRequest request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
// 請(qǐng)求體
NSString bodyStr = @"******=&******=";
request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
請(qǐng)求體
NSString *bodyStr = @"******=***&******=***";
request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];