標籤:style code tar color http int
iOS SDK為HTTP請求提供了同步和非同步請求兩種不同的API,而且可以使用Get或Post等要求方法。
1、發送 “同步、Get” 請求
- (void)startRequest
{
NSString *strUrl = [[NSString alloc] initWithFormat:@"http://iosbook3.com/service/mynotes/webservice.php?email=%@&type=%@&action=%@",@"[email protected]",@"JSON",@"query"]; 【1】
NSURL *url = [NSURL URLWithString:[strUrl URLEncodedString]]; 【2】
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; 【3】
NSData *data = [NSURLConnection sendSynchronousRequest:request returningReponse:nil error:nil]; 【4】
NSLog(@"請求完成....");
NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
........
}
【1】:指定請求的URL。請求的參數全部暴露在URL後面(說明URL不包括請求參數),這是Get要求方法的特定
【2】:建立NSURL對象。[strUrl URLEncodedString]將strUrl字串轉換為URL字串,在Internet傳輸的時候,URL中不能有中文等特殊字元,使用URLEncodedString就是把這些特殊字元轉化為有百分比符號的URL編碼。
【3】:建立NSURLRequest對象,可以使用更為複雜的形式initWithURL:cachePolicy:timeoutInterval設定緩衝策略和逾時時間長度。
【4】:使用NSURLConnection的sendSynchronousRequest: returningReponse: error:同步方法進行請求,返回NSData類型的資料。所謂同步方法就是請求過程中線程阻塞到這裡,直到伺服器應答返回回來為止。
2、發送“非同步、Get”請求
非同步請求會使用NSURLConnection委託協議NSURLConnectionDelegate。
NSURLConnectionDelegate協議的方法有:
connection:didReciveData:請求成功,開始接收資料,如果資料量很多,可能會被多次調用
connection:didFailWithError:載入資料出現異常
connectionDidFinishLoading:成功完成載入資料,在connection:didReciveData:方法之後執行。
- (void)startRequest
{
NSString *strUrl = [[NSString alloc] initWithFormat:@"http://iosbook3.com/service/mynotes/webservice.php?email=%@&type=%@&action=%@",@"[email protected]",@"JSON",@"query"];
NSURL *url = [NSURL URLWithString:[strUrl URLEncodedString]];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request
delegate:self ];
if (connection)
{
_datas = [[NSMutableData alloc] init];
}
}
#pragma mark - NSURLConnection代理方法
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_datas appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"請求完成....");
NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
。。。
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}
從上面兩個Get請求方式可以看出:Get請求方式與同步請求還是非同步請求無關。
3、發送“非同步、Post”請求
使用Post方法請求的關鍵是:使用NSMutableURLRequest類替代NSURLRequest。
- (void)startRequest
{
NSString *strUrl = [[NSString alloc] initWithFormat:@"http://iosbook3.com/service/mynotes/webservice.php"];
NSURL *url = [NSURL URLWithString:[strUrl URLEncodedString]];
// 準備請求體
NSString *post = [NSString stringWithFormat:@"email=%@&type=%@&action=%@",@"[email protected]",@"JSON",@"query"] ;
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; 【1】
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData]; // HTTPBody部分是請求參數。
NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request
delegate:self ];
if (connection)
{
_datas = [[NSMutableData alloc] init];
}
}
【1】:將參數字串轉換成NSData類型,編碼一定要採用UTF-8.
註:設定request要求標頭:
[ request setValue :@“application/soap+xml;charset=utf-8” forHTTPHeaderField:@"Content-Type" ] ;