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

iOS 开发之 网络编程(HTTP协议,NSURL-get post)

2015-09-15 17:41 791 查看
一、1、HTTP(超文本传输协议)HyperText Transfer Protocol。所有的WWW文件都必须遵守这个标准
http是用于www(万维网)浏览传输数据的一个协议
访问的是远程的网站资源 格式是http://
2、HTTP协议的作用
(1)规定客户端和服务器之间的数据传输格式
(2)让客户端和服务器能有效地进行数据沟通
3、为什么选择使用HTTP
(1)简单快速。因为HTTP协议简单,所以HTTP服务器的程序规模小,因而通信速度很快。
(2)灵活。HTTP允许传输任意类型的数据
(3)HTTP 是非连续连接 限制每次连接只处理一个请求 服务器对客户端的请求做出响应后 马上断开连接 这种方式可以节省传输时间
4、HTTP的通信过程
(1)请求:客户端向服务器索要数据
(2)响应:服务器返回客户端相应地数据

*****
5、HTTP的请求方法 get post
(1)get 会把请求的内容 拼接到 链接地址 里面(数据请求的时候 默认是get)
例如:www.baidu.com/user/login?username = 小明, password = 123
(2)get特征
1>浏览器和服务器对URL长度有限制 因此在URL后面附带的参数是有限制的 通常不能超过1KB
2>会把请求的数据 暴露在接口里面

(3)post 参数全部放在请求体中
1>保证数据的安全
2>没有具体的长度限制

6、选择get和post的建议
(1)如果要传输大量数据 比如上传文件 只能用post请求
(2)get的安全性比post要差些 如果包含机密/敏感信息 建议用post
(3)如果仅仅是索取数据(数据查询) 建议使用get
(4)如果是增加、修改、删除数据 建议使用post

7、URL:Uniform Resource Locator(统一资源定位符)
通过1个URL 能找到互联网上唯一的一个资源
8、通过URL获得到URL里面的内容(字符串)
(1)NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSString *content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
9、通过URL获得到URL里面的data
NSURL *url = [NSURL URLWithString:@"http://preview.quanjing.com/is_rm001/is0997q01.jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
10、网络请求
(1)同步请求
1>同步请求:等所有操作完全执行完毕 才会继续执行
2>同步请求的弊端:会遇到 假死的情况(只要请求的操作没有完全执行完毕 就不会再去响应 任何事件(在同一线程))
NSURL *url = [NSURL URLWithString:@“http://preview.quanjing.com/is_rm001/is0997q01.jpg"];
//实例化请求对象 里面携带着 请求的地址
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// data 服务器响应返回的数据
// NSURLConnection 发送请求的类
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

(2)异步请求
1>异步请求:在程序运行的时候 会利用空闲的时间 去执行里面的操作 不会影响到 同一线程里面的其他操作
NSURL *url = [NSURL URLWithString:@“http://preview.quanjing.com/is_rm001/is0997q01.jpg”];
//实例化请求对象 里面携带着 请求的地址
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//发送一个异步请求 在quene 这个线程里面去执行
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// response:服务器回应的内容(回应状态的code 以及error)
// data:回应给 客户端 需要的数据
// code
}];
}

11、请求方法(get、post)
(1)get:把传输的数据 放在链接地址里面
// 接口文件
NSString *interfaceString = @"http://apis.baidu.com/showapi_open_bus/mobile/find";
// 请求内容
NSString *requestVontentString = @“num=1234456”;
//拼接地址
NSString *urlString = [NSString stringWithFormat:@"%@?%@", interfaceString, requestVontentString];
//把连接地址字符串 转成NSUTF8StringEncoding
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
// 可变请求 可以添加 请求方式 以及请求的 请求头 或者更多
// timeoutInterval 请求多少时间 超过 时间 不再发送 这个请求
// cachePolicy 缓存内容的方式
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10 ];
//指定HTTP的请求方式
request.HTTPMethod = @“GET”;
NSString *apiKey = @"e7f5ac9e7c42a6c8cb125ee1d7e8779e";
// 把apiKey 发送给 服务器 指定的请求头位置
// forHTTPHeaderField 需要的KEY 是服务器指定的key
[request addValue:apiKey forHTTPHeaderField:@“apiKey"];
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 解析 json 文件
// 把data 转换成json 文件
NSDictionary *info = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error:nil];

(2)post:post 参数全部放在请求体中
1>请求参数的接口地址
NSURL *url = [NSURL URLWithString:@"http://www.weihuok.com/customer2/GetService"];
2>请求的参数
// PlatformType 设备类型 3表示iOS设备
NSDictionary *dic = @{@"PlatformType “:@"3"};
3>可变请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
4>设置HTTP请求方式
request.HTTPMethod = @“POST”;
5>设置请求的参数
// HTTPBody 要的是data
// dataUsingEncoding 把字符串 转成data
request.HTTPBody = [[NSString stringWithFormat:@"%@", dic] dataUsingEncoding:NSUTF8StringEncoding];
6>获得服务器下发数据
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSDictionary *info = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error:nil];
}];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: