网络编程(一) 利用NSURLSession发送GET POST请求
Xcode 7.0后,http链接不能直接访问(https可以),需要在Info.plist增加下面一项才能正确访问。
使用NSURLSession进行网络请求的流程:
1.构造NSURL
2.构造NSURLRequest请求对象
3.构造NSURLSession会话对象
4.创建网络请求任务:dataTask, downloadTask, uploadTask
5.发送网络请求
1.GET 请求(GET一般用于获取/查询资源信息)
- (void)HTTPGET { //1.构造NSURL NSURL *url = [NSURL URLWithString:@"http://piao.163.com/m/cinema/list.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000"]; //2.构造NSURLRequest请求对象 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; //对请求对象进行设置 request.URL = url; request.HTTPMethod = @"GET"; //3.构造NSURLSession会话对象 NSURLSession *session = [NSURLSession sharedSession]; //4.创建dataTask网络请求任务(请求任务有3种dataTask, downloadTask, uploadTask) /* (1)completionHandler:是网络请求完成后会回调的block (2)response代表响应对象,可以由它获取当前响应的状态,响应头数据 (3)data代表服务器传输的数据,即响应体的内容 (4)error代表请求过程中出现错误,可以用它进行调试。 */ NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response; //打印响应状态码,200表示请求成功,其他百度一下HTTP响应状态码对照看就可以了 NSLog(@"响应状态码 = %ld",HTTPResponse.statusCode); //这里返回的是json数据,对响应数据进行json解析 id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"接收到的数据:%@",result); }]; //5.开始发送网络请求或者是继续之前挂起的网络请求任务 [dataTask resume]; }
2.POST请求(POST一般用于更新资源信息,也有很多情况是获取指定信息,需要在请求体里添加相应内容)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
- ( void )HTTPPOST
{ //1.构造NSURL
NSURL *url = [ NSURL URLWithString:@ "http://piao.163.com/m/cinema/schedule.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000" ];
//2.构造NSURLRequest请求对象
NSMutableURLRequest *request = [[ NSMutableURLRequest alloc] init];
request.URL = url;
request.HTTPMethod = @ "POST" ;
NSString *bodyString = @ "cinema_id=1533" ;
request.HTTPBody = [bodyString dataUsingEncoding: NSUTF8StringEncoding ];
//3.构造NSURLSession会话对象(单例)
NSURLSession *session = [ NSURLSession sharedSession];
//4.创建dataTask网络请求任务
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^( NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//打印响应状态码,200表示请求成功,其他百度一下HTTP响应状态码对照看就可以了
NSHTTPURLResponse *HTTPResponse = ( NSHTTPURLResponse *)response;
NSLog (@ "响应状态码 = %ld" ,HTTPResponse.statusCode);
//获取响应体数据,进行JSON解析
NSError *jsonError = nil ;
id result = [ NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error:&jsonError];
NSLog (@ "%@" , result);
}];
[task resume];
} |
打印结果