简介服务器
NSURLConnection:网络
做用: 一、负责发送请求,创建客户端和服务器的链接发送数据给服务器 二、并收集来自服务器的响应数据 步骤: 一、建立一个NSURL对象,设置请求路径 二、传入NSURL并建立一个NSURLRequest对象,设置请求头和请求体 三、使用NSURLConnection发送请求
常见类
```objc
一、NSURL:收纳请求的地址app
二、NSURLRequest:一个NSURLRequest对象就表明一个请求,它包含的信息有一个NSURL对象、请求方法、请求头、请求体等等 三、NSMutableURLRequest是NSURLRequest的子类```
-(void)sendSynchronousRequest{ //一、建立一个URL //协议头+主机地址+接口名称+?+参数1&参数2&参数3 //这里的话是我本身使用.Net开发的一个本地后台接口 http://192.168.1.0:8080/login?username=LitterL&pwd=123 NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123"]; //二、建立请求(Request)对象(默认为GET请求); NSURLRequest *requst = [[NSURLRequest alloc]initWithURL:url]; //三、发送请求 /* 第一个参数:请求对象 第二个参数:响应头 第三个参数:错误信息 返回值:NSData类型,响应体信息 */ NSError *error = nil; NSURLResponse *response = nil; //发送同步请求(sendSynchronousRequest) NSData *data = [NSURLConnection sendSynchronousRequest:requst returningResponse:&response error:&error]; //若是没有错误就执行 if (!error) { //打印的服务端返回的信息以及错误信息 NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]); NSLog(@"%@",error); } }
补充:异步
一、上面的话默认为GET请求,能够看到协议头+主机地址+接口名称+?+参数1&参数2,这里的话教你们一个技巧,若是看到接口后面是带问号(?)那么就证实它为GET请求,至于POST请求的话在异步请求里面会告诉你们 二、这里的话默认是在主队列执行的,为同步请求,通常不建议你们使用这个,开发人员通常使用的方式是异步执行的,也就是下面这种方式,由于它是在后台线程执行。
异步请求函数
-(void)sendAsynchronousRequest{ //一、建立一个URL NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login"]; //二、建立请求(Request)对象 这里使用的是它的子类NSMutableURLRequest,由于子类才具备设置方法和设置请求体的属性 NSMutableURLRequest *requst = [[NSMutableURLRequest alloc]initWithURL:url]; //2.一、设置请求方法 requst.HTTPMethod = @"POST"; //2.二、设置请求体,由于传入的为Data数据全部这里须要转换 requst.HTTPBody = [@"username=LitterL&pwd=123" dataUsingEncoding:NSUTF8StringEncoding]; //2.三、设置请求超时时间,若是超过这个时间,请求为失败 requst.timeoutInterval = 10; //三、发送请求 /* 第一个参数:请求对象 第二个参数:队列 第三个参数:Block回调函数 response:响应头 data:响应体信息 connectionError:错误信息 */ //发送异步请求(sendAsynchronousRequest) [NSURLConnection sendAsynchronousRequest:requst queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { NSLog(@"----%@",[NSThread currentThread]); //解析数据 NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]); }]; }
补充:atom
一、在这里的话是咱们是使用了POST请求,然而使用POST请求那么就必须的使用NSURLRequest的子类NSMutableURLRequest. 二、只有在它的里面才具备设置请求方法和方法体的属性
代理请求url
//若是你使用的是代理请求的话,那么你须要知道四个方法: 一、当接受到服务器响应的时候会调用:response(响应头) -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; 二、当接受到服务器返回数据的时候调用(会调用屡次) - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; 三、当请求失败的时候调用 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error; 四、当请求结束(成功|失败)的时候调用 - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
一、首先实现代理,并定义一个NSData对象初始化,在请求结束的时候查看服务器传来的内容, @interface ViewController ()<NSURLConnectionDataDelegate> /** 可变的二进制数据 */ @property (nonatomic, strong) NSMutableData *fileData; @end /* 懒加载 */ -(NSMutableData *)fileData{ if (!_fileData) { _fileData = [[NSMutableData alloc]init]; } return _fileData; } 二、实现代理中的四个方法 //1.当接受到服务器响应的时候会调用:response(响应头) -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"接受到相应"); } //2.当接受到服务器返回数据的时候调用(会调用屡次) -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // NSLog(@"接受到数据"); //拼接数据 [self.fileData appendData:data]; } //3.当请求失败的时候调用 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"请求失败"); } //4.当请求结束(成功|失败)的时候调用 -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"请求结束"); //解析数据 NSLog(@"%@",[[NSString alloc]initWithData:self.fileData encoding:NSUTF8StringEncoding]); } 三、最后编写点击时调用的方法 -(void)sendRequestWithDelegate{ //1.肯定请求路径 NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123"]; //2.建立请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //三、代理请求 /* 第一个参数:请求对象 第二个参数:谁成为代理 第三个参数:startImmediately :是否当即开始发送网络请求 */ NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO]; //[connect cancel]; 取消 [connect start]; }
结束线程
本章到此结束 欢迎各位码友随意转载并指正