(轉(zhuǎn))iOS 網(wǎng)絡(luò)請求匯總

原生session的GET請求

   //入?yún)⑵唇樱ǎ裤暯樱?,參?amp;分割
    NSString *urlstring=@"http://121.43.59.5:8012/GetToken.aspx?username=123";
    /*如果URL網(wǎng)址里有中文,要先轉(zhuǎn)成utf8編碼(如百度天氣接口)
     NSString *urlstring=[NSString stringWithFormat:@"http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=%@&mcode=%@",ak,mcode];
    NSString *urlstr=[urlstring stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
     */
    NSURL *url = [NSURL URLWithString:urlstring];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //獲取的內(nèi)容是字符串
        NSString *str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@",str);
    }];
    [dataTask resume];

原生session的POST請求

  //1.創(chuàng)建會話對象
    NSURLSession *session = [NSURLSession sharedSession];
    //2.根據(jù)會話對象創(chuàng)建task
    NSURL *url = [NSURL URLWithString:@"http://121.43.59.5:8011/httptest.aspx"];
    //3.創(chuàng)建可變的請求對象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //4.修改請求方法為POST
    request.HTTPMethod = @"POST";
    [request setValue:@"application/json;encoding=utf-8" forHTTPHeaderField:@"Content-Type"];
    //5.設(shè)置請求體
    NSString *prame = [NSString stringWithFormat:@"test=123"];
    request.HTTPBody = [prame dataUsingEncoding:NSUTF8StringEncoding];
    //6.根據(jù)會話對象創(chuàng)建一個Task(發(fā)送請求)
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error){
        //8.解析數(shù)據(jù)
        //根據(jù)后端數(shù)據(jù)解析
        NSString *str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        //NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        NSLog(@"%@",str);
        /* dispatch_async(dispatch_get_main_queue(), ^{
                    網(wǎng)絡(luò)請求自動開啟在子線程,UI刷新的代碼需要回到主線程操作
                });
        */
    }];
    //7.執(zhí)行任務(wù)
    [dataTask resume];
#pragma mark NSURLSessionDataDelegate
//如果發(fā)送的請求是https的,那么才會調(diào)用該方法,(需要遵循代理)
//challenge 質(zhì)詢,挑戰(zhàn)
//NSURLAuthenticationMethodServerTrust
-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
{
    //如果不是服務(wù)器證書直接返回
    if(![challenge.protectionSpace.authenticationMethod isEqualToString:@"NSURLAuthenticationMethodServerTrust"])
    {
        return;
    }
    NSLog(@"%@",challenge.protectionSpace);
    //NSURLSessionAuthChallengeDisposition 如何處理證書
    /*
     NSURLSessionAuthChallengeUseCredential = 0, 使用該證書 安裝該證書
     NSURLSessionAuthChallengePerformDefaultHandling = 1, 默認(rèn)采用的方式,該證書被忽略
     NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2, 取消請求,證書忽略
     NSURLSessionAuthChallengeRejectProtectionSpace = 3,          拒絕
     */
    NSURLCredential *credential = [[NSURLCredential alloc]initWithTrust:challenge.protectionSpace.serverTrust];

    //NSURLCredential 授權(quán)信息
    completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
}

AFN的GET網(wǎng)絡(luò)請求如下:

NSString *urlstring=@"http://120.25.226.186:32812/login";
    NSDictionary *param=@{@"username": @"520it",
                          @"pwd":@"520it"};
    //1、創(chuàng)建管理者(AFHTTPSessionManager內(nèi)部基于NSURLSession實現(xiàn))
    AFHTTPSessionManager *manger=[AFHTTPSessionManager manager];
    /*序列化處理
     設(shè)置AFN采用什么樣的方式來解析服務(wù)器返回的數(shù)據(jù), 默認(rèn)采用json方式解析數(shù)據(jù)
     //如果返回的是XML,那么告訴AFN,響應(yīng)的時候使用XML的方式解析
     manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

     //如果返回的就是二進(jìn)制數(shù)據(jù),那么采用默認(rèn)二進(jìn)制的方式來解析數(shù)據(jù)
     //manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    //采用JSON的方式來解析數(shù)據(jù)
    //manager.responseSerializer = [AFJSONResponseSerializer serializer];
     */
    manger.responseSerializer=[AFHTTPResponseSerializer serializer];
    /*
     requestSerializer:請求數(shù)據(jù)格式,默認(rèn)是二進(jìn)制的HTTP
     manger.requestSerializer=[AFHTTPRequestSerializer serializer];
     manger.requestSerializer=[AFJSONRequestSerializer serializer];
     manger.requestSerializer=[AFXMLRequestSerializer serializer];
     */
    [manger GET:urlstring parameters:param progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        //NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
        NSLog(@"%@",str);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"請求失敗");
    }];

AFN POST請求

NSString *urlstr=@"http://120.25.226.186:32812/login";
    NSDictionary *param=@{@"username": @"520it",
                          @"pwd":@"520it"
                          };
    AFHTTPSessionManager *manger=[AFHTTPSessionManager manager];
    manger.responseSerializer=[AFHTTPResponseSerializer serializer];
    [manger POST:urlstr parameters:param progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"%@",str);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"請求失敗");
    }];
//AFN對https的處理
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //更改解析方式(默認(rèn)為json解析,此次請求為網(wǎng)址源碼)
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    //設(shè)置對證書的處理方式
    //接受無效證書,默認(rèn)為NO
    manager.securityPolicy.allowInvalidCertificates = YES;
    //對域名的檢測,默認(rèn)為YES
    manager.securityPolicy.validatesDomainName = NO;

    [manager GET:@"https://kyfw.12306.cn/otn" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"success---%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error---%@",error);
    }];

原文地址:http://www.itdecent.cn/p/28cc386fd460
原文更加詳細(xì),總結(jié)的更加完整,我僅僅使用了上述幾種請求,復(fù)制此文里留用....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容