NSURLSession的实际应用
本文介绍如何使用 NSURLSession 进行网络传输较复杂的数据——包含 file(UIImage,NSData等)类型的 json数据
文章索引词
- NSURLSession 的使用
- Types of URL Sessions
- NSJSONSerialization dataWithJSONObject
- POST multipart/form-data with Objective-C
- Objective-C 拼接NSData 数据
- HTTP协议
- Postman 测试上传图片
需求场景
例如,给定请求域名和path以及参数如下
http://127.0.0.1:888/wandd/fafd
request:
{
"id":16,
"client_screenshot": "图片文件",
"top_viewController":"",
}
response
{
"BaseResp":{
"StatusMessage":"success",
"StatusCode":0
}
}
NSURLSession
官方介绍
@interface NSURLSession : NSObject
An object that coordinates a group of related, network data transfer tasks
协调一组相关的网络数据传输任务的对象
NSURLSession 类和相关类提供了一个API,用于从URL指示的网络端下载数据并将数据上传到该网络端。app还可以使用此API在应用未运行时执行后台下载,或者在iOS中,在应用挂起时也执行后台下载。您可以使用相关的NSURLSessionDelegate和 NSURLSessionTaskDelegate 来支持身份验证,并接收重定向和完成任务等事件。
make NSURLSession
NSURLSession *session = [NSURLSession sharedSession];
//系统提供了一个 NSURLSession 的单例
make URL
NSURL *url = [NSURL URLWithString:@"协议://主机地址:port/路径?参数&参数"];
- 协议:不同的协议,代表着不同的资源查找方式、资源传输方式,比如常用的http,ftp等
- ip:存放资源的主机的IP地址(域名)
- port:端口
- path:资源存放在主机的地址
- 参数:参数可有可无,也可以多个。如果带参数的话,用“?”号后面接参数,多个参数的话之间用&隔开
NSString *vurl = hostport <0? [NSString stringWithFormat: @"%@/%@", hostip, pathStr]:[NSString stringWithFormat: @"%@:%d/%@", hostip, hostport, pathStr];
vurl = [vurl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString:vurl];
实际应用中 URL 一般都是通过 NSString 拼接而成,然后对字符串进行编码(
通过将不在指定集合中的所有字符替换为百分比编码的字符,返回从接收器生成的新字符串)
make json data
request:
{
"task_id":16,
"pic": "客户端截图图片文件",