iOS学习笔记-146.网络06——NSURLConnection03_使用

来源:互联网 发布:validateform js 编辑:程序博客网 时间:2024/06/05 20:53

  • 网络06NSURLConnection03_使用
    • 一请求的登陆接口分析
    • 二GET方法同步请求使用NSURLRequest
      • 1 代码示例
      • 2 响应结果
    • 三GET方法同步请求使用NSMutableURLRequest
      • 1 代码示例
      • 2 响应结果
    • 四GET方法异步请求使用NSMutableURLRequest
      • 1 代码示例
      • 2 响应结果
    • 五POST方法同步请求使用NSMutableURLRequest
      • 1 代码示例
      • 2 响应结果
    • 六POST方法异步请求使用NSMutableURLRequest
      • 1 代码示例
      • 2 响应结果
    • 七POST方法请求使用NSMutableURLRequest响应通过代理获取
      • 1 代码示例
      • 2 响应结果
      • 3 打印结果
    • 八全部代码

网络06——NSURLConnection03_使用

一、请求的登陆接口分析

如果你没有搭建自己登陆接口的话,可以按照
iOS学习笔记-141.网络01——使用Tomcat和JavaWeb来搭建自己的网络接口
搭建

请求的方法、参数、地址等可以查看我们的

iOS学习笔记-143.网络03——自己搭建的后台登陆接口文档

通过我们的接口文档,我们知道

请求的地址是 http://127.0.0.1:8080/qwmapi/login

请求头需要传递的信息是

字段 类型 必选 说明 QWM-CLIENT-TYPE String 是 客户端类型(1:安卓 2:iOS)

请求参数是

字段 类型 必选 说明 userName String 是 用户名 password String 是 密码(经过MD5加密一次的密文)

二、GET方法同步请求(使用NSURLRequest)

我们使用的 NSURLRequest,无法设置请求头,所以我们的这个方法应该是登陆不成功的

2.1 代码示例

//登陆请求地址#define LOGINURL @"http://127.0.0.1:8080/qwmapi/login"/*get同步方法测试*/-(void)getSyncTest1{    //1.设置请求路径    NSURL *url = [NSURL URLWithString:LOGINURL];    //2.创建请求对象    NSURLRequest *request = [NSURLRequest requestWithURL:url];    //3.使用NSURLSession sendsync方法发送网络请求    /*       第一个参数:请求对象       第二个参数:响应头信息,当该方法执行完毕之后,该参数被赋值       第三个参数:错误信息,如果请求失败,则error有值       */    //该方法是阻塞式的,会卡住线程    NSHTTPURLResponse *response = nil;    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];    //4.接收到服务器的响应后,解析响应体    NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];    NSLog(@"%@",str);}

2.2 响应结果

{    "code": 700,    "msg": "客户端类型不能为空"}

三、GET方法同步请求(使用NSMutableURLRequest)

3.1 代码示例

//登陆请求地址#define LOGINURL @"http://127.0.0.1:8080/qwmapi/login"/*get同步方法测试*/-(void)getSyncTest2{    //1.设置请求路径    NSString *path = [NSString stringWithFormat:@"%@?userName=qiwenming&password=%@",LOGINURL,[@"123456" MD5_32BitLower]];    NSURL *url = [NSURL URLWithString:path];    //2.创建请求对象    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //3.添加请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //4.使用NSURLSession sendsync方法发送网络请求     /*        第一个参数:请求对象        第二个参数:响应头信息,当该方法执行完毕之后,该参数被赋值        第三个参数:错误信息,如果请求失败,则error有值        */    //该方法是阻塞式的,会卡住线程    NSHTTPURLResponse *response = nil;    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];    //5.接收到服务器的响应后,解析响应体    NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];    NSLog(@"%@",str);}

3.2 响应结果

{    "code": 200,    "msg": "登录成功",    "t": {        "userName": "qiwenming",        "clientType": "2"    }}


四、GET方法异步请求(使用NSMutableURLRequest)

4.1 代码示例

/*get异步请求*/-(void)getAsyncTest{    //1.设置请求路径    NSString *path = [NSString stringWithFormat:@"%@?userName=qiwenming&password=%@",LOGINURL,[@"123456" MD5_32BitLower]];    NSURL *url = [NSURL URLWithString:path];    //2.创建请求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //3.设置请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //4.使用NSURLSession sendsync方法发送网络请求    /*       第一个参数:请求对象       第二个参数:队列 决定代码块completionHandler的调用线程       第三个参数:completionHandler 当请求完成(成功|失败)的时候回调       response:响应头       data:响应体       connectionError:错误信息     */    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {        //5.接收到服务器的响应后,解析响应体        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);    }];}

4.2 响应结果

{    "code": 200,    "msg": "登录成功",    "t": {        "userName": "qiwenming",        "clientType": "2"    }}


五、POST方法同步请求(使用NSMutableURLRequest)

5.1 代码示例

/*post同步方法测试*/-(void)postSyncTest{    //1.设置URL    NSURL *url = [NSURL URLWithString:LOGINURL];    //2.创建请求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //设置请求方法,必须大写    [request setHTTPMethod:@"POST"];    //设置请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //设置请求参数    NSString *params = [NSString stringWithFormat:@"userName=qiwenming&password=%@",[@"123456" MD5_32BitLower]];    request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding];    //3.通过NSURLConnection发从请求    NSHTTPURLResponse *response = nil;    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];    //4.返回的数据    NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);}

5.2 响应结果

{    "code": 200,    "msg": "登录成功",    "t": {        "userName": "qiwenming",        "clientType": "2"    }}


六、POST方法异步请求(使用NSMutableURLRequest)

6.1 代码示例

/*post异步方法测试*/-(void)postAsyncTest{    //1.设置请求地址    NSURL *url = [NSURL URLWithString:LOGINURL];    //2.创建请求对象    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //设置请求方法    request.HTTPMethod = @"POST";    //设置请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //设置请求体    NSString *params = [NSString stringWithFormat:@"userName=qiwenming&password=%@",[@"123456" MD5_32BitLower]];    request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding];    //3.发送网络请请求    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {        //4.处理响应        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);    }];}

6.2 响应结果

{    "code": 200,    "msg": "登录成功",    "t": {        "userName": "qiwenming",        "clientType": "2"    }}


七、POST方法请求(使用NSMutableURLRequest),响应通过代理获取

7.1 代码示例

/*NSURLConnection 设置代理的请求方式*/-(void)delegateRequest{    //1.设置请求地址    NSURL *url = [NSURL URLWithString:LOGINURL];    //2.创建创建对象    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //设置超时时间    request.timeoutInterval = 10;    //设置请求方法    request.HTTPMethod = @"POST";    //设置请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //设置请求体    NSString *params = [NSString stringWithFormat:@"userName=qiwenming&password=%@",[@"123456" MD5_32BitLower]];    request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding];    //3.发送网络连接    //创建的时候,发送请求需要检查startImmediately的值    //(startImmediately == YES 会发送 | startImmediately == NO 则需要调用start方法)    //[[NSURLConnection alloc]initWithRequest:request delegate:self];    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];    //4.开始连接    [connection start];    //取消连接    //[connection cancel];}//===============================代理方法=================================/*1.开始接收到服务器的响应时调用*/-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    NSLog(@"--接收到服务器响应啦--");}/*2.接收到服务器返回的数据时调用(服务器返回的数据比较大时会调用多次)*/-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    NSLog(@"--接收到数据啦---");    [self.resultData appendData:data];}/*3.服务器返回的数据完全接收完毕后调用*/-(void)connectionDidFinishLoading:(NSURLConnection *)connection{    NSLog(@"---数据接收完成啦--");    NSLog(@"%@",[[NSString alloc]initWithData:self.resultData encoding:NSUTF8StringEncoding]);}/*4.请求出错时调用(比如请求超时)*/-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{     NSLog(@"---出错啦--");}

7.2 响应结果

{    "code": 200,    "msg": "登录成功",    "t": {        "userName": "qiwenming",        "clientType": "2"    }}

7.3 打印结果

[23650:122048] --接收到服务器响应啦--[23650:122048] --接收到数据啦---[23650:122048] ---数据接收完成啦--[23650:122048] {"code":700,"msg":"客户端类型不能为空"}

八、全部代码

////  ViewController.m//  001_NSURLConnection_get_post////  Created by 杞文明 on 17/9/11.//  Copyright © 2017年 杞文明. All rights reserved.//#import "ViewController.h"#import "NSString+MD5.h"//登陆请求地址#define LOGINURL @"http://127.0.0.1:8080/qwmapi/login"@interface ViewController ()<NSURLConnectionDataDelegate>@property (nonatomic, strong) NSMutableData *resultData;@end@implementation ViewController-(NSMutableData*)resultData{    if (!_resultData) {        _resultData = [NSMutableData data];    }    return _resultData;}-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//    [self getSyncTest1];//    [self getSyncTest2];//    [self getAsyncTest];//    [self postSyncTest];    [self delegateRequest];}/*get同步方法测试*/-(void)getSyncTest1{    //1.设置请求路径    NSString *path = [NSString stringWithFormat:@"%@?userName=qiwenming&password=%@",LOGINURL,[@"123456" MD5_32BitLower]];    NSURL *url = [NSURL URLWithString:path];    //2.创建请求对象    NSURLRequest *request = [NSURLRequest requestWithURL:url];    //3.使用NSURLSession sendsync方法发送网络请求    /*       第一个参数:请求对象       第二个参数:响应头信息,当该方法执行完毕之后,该参数被赋值       第三个参数:错误信息,如果请求失败,则error有值       */    //该方法是阻塞式的,会卡住线程    NSHTTPURLResponse *response = nil;    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];    //4.接收到服务器的响应后,解析响应体    NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];    NSLog(@"%@",str);}/*get同步方法测试*/-(void)getSyncTest2{    //1.设置请求路径    NSString *path = [NSString stringWithFormat:@"%@?userName=qiwenming&password=%@",LOGINURL,[@"123456" MD5_32BitLower]];    NSURL *url = [NSURL URLWithString:path];    //2.创建请求对象    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //3.添加请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //4.使用NSURLSession sendsync方法发送网络请求     /*        第一个参数:请求对象        第二个参数:响应头信息,当该方法执行完毕之后,该参数被赋值        第三个参数:错误信息,如果请求失败,则error有值        */    //该方法是阻塞式的,会卡住线程    NSHTTPURLResponse *response = nil;    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];    //5.接收到服务器的响应后,解析响应体    NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];    NSLog(@"%@",str);}/*get异步请求*/-(void)getAsyncTest{    //1.设置请求路径    NSString *path = [NSString stringWithFormat:@"%@?userName=qiwenming&password=%@",LOGINURL,[@"123456" MD5_32BitLower]];    NSURL *url = [NSURL URLWithString:path];    //2.创建请求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //3.设置请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //4.使用NSURLSession sendsync方法发送网络请求    /*       第一个参数:请求对象       第二个参数:队列 决定代码块completionHandler的调用线程       第三个参数:completionHandler 当请求完成(成功|失败)的时候回调       response:响应头       data:响应体       connectionError:错误信息     */    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);    }];    //5.接收到服务器的响应后,解析响应体}/*post同步方法测试*/-(void)postSyncTest{    //1.设置URL    NSURL *url = [NSURL URLWithString:LOGINURL];    //2.创建请求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //设置请求方法,必须大写    [request setHTTPMethod:@"POST"];    //设置请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //设置请求参数    NSString *params = [NSString stringWithFormat:@"userName=qiwenming&password=%@",[@"123456" MD5_32BitLower]];    request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding];    //3.通过NSURLConnection发从请求    NSHTTPURLResponse *response = nil;    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];    //4.返回的数据    NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);}/*post异步方法测试*/-(void)postAsyncTest{    //1.设置请求地址    NSURL *url = [NSURL URLWithString:LOGINURL];    //2.创建请求对象    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //设置请求方法    request.HTTPMethod = @"POST";    //设置请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //设置请求体    NSString *params = [NSString stringWithFormat:@"userName=qiwenming&password=%@",[@"123456" MD5_32BitLower]];    request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding];    //3.发送网络请请求    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {        //4.处理响应        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);    }];}/*NSURLConnection 设置代理的请求方式*/-(void)delegateRequest{    //1.设置请求地址    NSURL *url = [NSURL URLWithString:LOGINURL];    //2.创建创建对象    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //设置超时时间    request.timeoutInterval = 10;    //设置请求方法    request.HTTPMethod = @"POST";    //设置请求头    [request setValue:@"2" forHTTPHeaderField:@"QWM-CLIENT-TYPE"];    //设置请求体    NSString *params = [NSString stringWithFormat:@"userName=qiwenming&password=%@",[@"123456" MD5_32BitLower]];    request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding];    //3.发送网络连接    //创建的时候,发送请求需要检查startImmediately的值    //(startImmediately == YES 会发送 | startImmediately == NO 则需要调用start方法)    //[[NSURLConnection alloc]initWithRequest:request delegate:self];    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];    //4.开始连接    [connection start];    //取消连接    //[connection cancel];}//===============================代理方法=================================/*1.开始接收到服务器的响应时调用*/-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    NSLog(@"--接收到服务器响应啦--");}/*2.接收到服务器返回的数据时调用(服务器返回的数据比较大时会调用多次)*/-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    NSLog(@"--接收到数据啦---");    [self.resultData appendData:data];}/*3.服务器返回的数据完全接收完毕后调用*/-(void)connectionDidFinishLoading:(NSURLConnection *)connection{    NSLog(@"---数据接收完成啦--");    NSLog(@"%@",[[NSString alloc]initWithData:self.resultData encoding:NSUTF8StringEncoding]);}/*4.请求出错时调用(比如请求超时)*/-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{     NSLog(@"---出错啦--");}@end