您的位置:首页 > 理论基础 > 计算机网络

iOS的基础网络编程

2016-04-27 14:08 330 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/f932565568/article/details/51260709

如有错误请指出


首先在进行网络编程时我们要对HTTP协议有一定的了解。HTTP协议,全称“超文本传输协议”,浏览器和服务器之间的通信规则,HTTP协议永远都是客户端发起请求,服务器回送响应。客户端发送一个请求,是向服务器提交一个请求包,服务器收到请求后,会向客户端回应一个响应包。HTTP的请求包由两部分组成:请求头和请求体。同理响应包也有响应头和响应体。服务器是通过响应包将数据发送给客户端,数据主要在响应包得响应体中,响应头中有相应的数据的类型以及状态码。HTTP常见的请求方式有两种,一种是GET请求,是向服务器索取数据的一种请求方式,只有请求头,另外一种是POST请求,是向服务器提交数据的一种方式请求方式,有请求头和请求体。



讲完了HTTP的相关知识,现在给大家讲一下接下来要用到的类。

1.NSURLRequest 用于储存客户端发送给服务器的数据包信息和请求设置,因为其基本设置选项较少所以我们一般使用其子类:NSMutableURLRequest。

2.NSURLResponse用于储存服务器返回的响应包数据,如果发送的是HTTP请求,那么使用其子类:NSHTTPURLResponse

3.NSURLSession指的是一个网络会话(session),一个网络会话可以发起多个任务(Task),一个任务对应了一次网络请求。

Task有三种类型: (1).NSURLSessionDataTask:数据任务,擅长处理小且频繁的应用程序之间的请求。 (2).NSURLSessionUploadTask:上传任务,以文件的形式发送数据,可以在 程序没有运行时进行后台上传。 (3).NSURLSessionDownloadTask:下载任务,以文件的形式接受数据,可以在程序没有运行时进行后台下载。
4.NSURLSessionConfiguration用于配置创建Session的类型,总共有三个类型: (1).deafaultSessionConfiguration用于创建默认类型的Session对象, (2).ephemeralSessionConfiguration创建临时类型的Session对象 (3).backgroundSessionConfiguration:(NSString *)identifier用于创建后台Session对象
网络请求的基本流程:

使用NSURLSession进行网络请求的流程:

     1.构造NSURL

     2.构造NSURLRequest请求对象

     3.构造NSURLSession会话对象

     4.创建网络请求任务:dataTask, downloadTask, uploadTask

     5.发送网络请求



GET代码:

//请求网址
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"];

//设置request属性
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

request.HTTPMethod = @"GET";
request.timeoutInterval = 60;

//创建session,默认是多线程
NSURLSession *session = [NSURLSession sharedSession];

//设置任务及其回调的Block
NSURLSessionDataTask *dataTsk = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"请求出错:%@",error);

return;
}

NSError *jsonError = nil;

//获取响应的数据
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError];
//打印响应的数据
NSLog(@"%@",dic);

[_textView performSelectorOnMainThread:@selector(setText:) withObject:[NSString stringWithFormat:@"%@", dic] waitUntilDone:YES];
}];
//开始任务
[dataTsk resume];

POST代码:

   

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"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
//如果60S不响应就退出
request.timeoutInterval = 60;
//设置请求体
NSData *bodyData =[@"cinema_id=1533" dataUsingEncoding:NSUTF8StringEncoding];
request.HTTPBody = bodyData;

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

NSString *jsonString = [NSString stringWithFormat:@"%@",dic];

//转换类型
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
//打印状态码
NSLog(@"状态设计:%li",httpResponse.statusCode);
//打印响应头
NSDictionary *responseHeader = httpResponse.allHeaderFields;
NSLog(@"响应头:%@",responseHeader);
}];

[dataTask resume]


下载任务:

NSURL *url = [NSURL URLWithString:@"http://dlsw.baidu.com/sw-search-sp/soft/bf/35013/Baidu_Setup_1959_2.2.0.1452_10000010.1449569847.exe"];
//设置Configs属性
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];

//这儿可以使用代理方法检测下载任务
session = [NSURLSession s
4000
essionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];

downloadTask = [session downloadTaskWithURL:url];

[downloadTask resume];

上传任务:

NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/2/statuses/upload.json"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data;charset = utf-8;boundary=%@", Boundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];

NSString *path = [[NSBundle mainBundle] pathForResource:@"upload_pic" ofType:@"jpg"];
NSData *imageData = [NSData dataWithContentsOfFile:path];
//自定义的请求体方法
NSData *boadyData = [self bulidHTTPBodyData:imageData];

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:boadyData completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

NSLog(@"error:%@", error);
NSLog(@"上传图片至微博成功:%@", response);
}];

[uploadTask resume];


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: