iOSネットワーク要求

5486 ワード

1.NSData
NSDataはGET要求に相当する。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
   NSString *urlStrig = @"http://ip:port?name=  &pwd=123";
   urlStrig = [urlStrig stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
   NSURL *url = [NSURL URLWithString:urlStrig];
   NSData *data = [NSData dataWithContentsOfURL:url];
});
2.NSURLConnection
1>GETパラメータをurlに綴り合わせる
NSString *urlStrig = @"http://ip:port?name=  &pwd=123";
    urlStrig = [urlStrig stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString:urlStrig];
NSURLRequest *request = [NSURLRequest requestWithURL:url];//   GET

//    
NSURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

//    
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {        

}];
一般的にhttpのGET要求はsendAynchronousRequestを使って非同期要求を送信すれば完成できます。大きなファイルをダウンロードするなら、代理方式を使って処理したほうがいいです。
//         NSURLConnection  ,         
//self      NSURLConnectionDataDelegate
[NSURLConnection connectionWithRequest:request delegate:self]
NSURLConnection Data Delegate代理方法
/**
                 

 @param response   ,             
 */
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
}

/**
                 
            

 @param data        
 */
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
}

/**
           
                  
 */
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
}

/**
         
 */
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
}
2>POSTパラメータを要求体に書き込みます。
NSString *urlStrig = @"http://ip:port/login";
urlStrig = [urlStrig stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString:urlStrig];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
request.HTTPBody = [@"account=12345&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        
}];
ここでは普通のパラメータだけを設定します。ファイルをアップロードするならiOSを参照してファイルをアップロードしてもいいです。
3.NSURLSession
使用方法はsessionオブジェクトを取得するために、sessionを使用して要求タスクを作成し、タスクを開始すればいいです。要求タスク:NSURLSessitionTaskは、URLセッションにおけるタスクのベースクラスであり、通常は直接使用せず、主にサブクラス1>簡単なhttp要求を使用する。
1.  NSURLSession  
NSURLSession *session = [NSURLSession sharedSession];
2.  session             
NSURL *url = [NSURL URLWithString:@""];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        
}];
3.    
[task resume];
ここでは簡単なGET要求です。POSTを使うならrequestを設定すればいいです。コードはNSURLConnectionと同じです。iOSファイルをダウンロードしてNSURLSessionの部分を参考にしてダウンロードしてください。
4.AFNetWorking
AFNetWorkingは、NSURLConnectionとNSURLSessionをパッケージ化したフレーム1>GETです。
NSMutableDictionary *param = [NSMutableDictionary dictionary];
param[@"username"] = @"  ";
param[@"age"] = @(20);
    
NSString *url = @"";
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//      
manager.requestSerializer.timeoutInterval = 30;
//       (responseObject) NSDictionary  ,   AFJSONResponseSerializer
manager.responseSerializer = [AFJSONResponseSerializer serializer];
//       (responseObject) NSXMLParser  
//manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
//       (responseObject)    (NSData)
//manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
[manager GET:url parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    
}];
2>POST間隔GET方法の「GET」を「POST」に変更すればいいです。ファイルをアップロードします。
NSString *urlString = @"";
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
//    
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:@"  " forKey:@"username"];
[mgr POST:urlString parameters:params constructingBodyWithBlock:^(id formData) {
    NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@""]);   
     /**
           

     @fileData :         
     @name :           
     @fileName :            
     @mimeType :        
   */
    [formData appendPartWithFileData:imageData name:@"file" fileName:@"text.png" mimeType:@"image/png"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
}];
AHTTPSession ManagerとAHTTPRequest OperationManagerの使い方は基本的に同じです。