网络请求(NSURLConnection)
2016-04-18 09:03
148 查看
4000
http和https
URL全称是Uniform Resource
Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源
URL就是资源的地址,位置,互联网上的每个资源都有一个唯一的URL
URL的基本格式=
协议://主机地址/路径
协议:不同的协议,代表着不同的资源查找方式,资源传输方式{ftp://(文件传输协议), http://(超文本传输协议), https://(安全超文本传输协议), file:// (本地文件协议)
}
主机地址:存放资源的主机的IP地址(地域)
路径:资源在主机的位置
HTTP协议, Hyper Transfer Protocol
(超文本传输协议)
是用于万维网(WWW)服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.
工作原理: HTTP协议采用请求/响应模型.
客户端向服务器发送一个请求报文,服务器以一个状态作为响应.
HTTPS: 安全超文本传输协议
它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版.
HTTPS协议使用SSL在发送方和接受方通过交换共知的秘钥来实现.因此,传送的数据不容易被网络黑客截取和解密.
SSL是Netscape公司所提出的安全保密协议,在浏览器和web服务器之间构造安全通道来进行数据传输,SSL运行TCP/IP
层值上,应用层之下,为应用程序提供加密数据通道.
异同:
https协议需要到ca申请证书,一般免费证书很少,需要交费
http是超文本传输协议,信息是明文传输,https则是具有安全性的加密传输协议
http和https是用的是完全不同的链接方式,用的端口也不一样,前者是后者是443
http的链接很简单,是无状态的
https是协议是由SSL + HTTP
协议构建的可进行加密传输,身份认证的网络协议 要比http安全
请求方式: GET 和 POST ;
连接方式:
同步连接:程序容易出现卡死现象
异步链接:等待数据返回
异步连接有两种实现方式:
设置代理,接收数据
实现block
注意
网络请求,允许
Http
请求
NSAppTransportSecurity 类型 Dictionary
下添加
NSAllowsArbitraryLoads
类型
Boolean ,值设为
YES
同步GET
:
创建一个地址字符串,注意: 不要有空格
创建一个统一资源定位符(URL)
创建一个NSURLRequest,并配置缓存策略和超时时间
通过一个NSData对象获取网络请求的数据
同步POST:
创建一个地址字符串,注意: 不要有空格
创建一个统一资源定位符
使用NSMutableURLRequest.
因为之后要对request做更改
创建一个上传数据的字符串,并且转成NSData对象
设置请求方式
(setHTTPMethod)
设置上传的Data(setHTTPBody)
通过一个NSData对象获取网络请求的数据
POST和GET的区别:
POST设置请求方式
GET设置Body
同步GET和POST的缺点:
会造成程序的卡顿,所以在开发中不推荐使用
[b]
//get[b]同步[/b][/b]
-
(IBAction)getT:(id)sender
{
//地址字符串
NSString *urlString
=
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
//统一资源定位符
(URL)
NSURL *url
= [NSURL
URLWithString:urlString];
//创建网络请求
(通过URL)
//参数
1:
统一资源定位符
//参数
2:
缓存协议(策略)
//参数
3:
有效时间(超出时间)
NSURLRequest *request
= [NSURLRequest
requestWithURL:url
cachePolicy:(NSURLRequestReloadIgnoringLocalCacheData)
timeoutInterval:60.0f];
//连接服务器,接收数据
//NSURLConnection
在9.0之后不推荐使用
//参数
1 : NSURLRequest
类型的对象
//参数
2 :
存储的是一些网络请求的信息,一般为nil
//参数
3 :
错误信息
NSData *data
= [NSURLConnection
sendSynchronousRequest:request
returningResponse:nil
error:nil];
NSLog(@"%@",data);
//解析数据
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:data
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"%@",dict);
}
[b]
//post[b]同步[/b][/b]
-
(IBAction)postT:(id)sender
{
//创建URL
NSString *string
=
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
NSURL *url
= [NSURL
URLWithString:string];
//创建请求
NSMutableURLRequest *request
= [NSMutableURLRequest
requestWithURL:url];
NSString *dataString
=
@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
//把这个字符串转成NSData类型的对象
NSData *postData
= [dataString
dataUsingEncoding:
NSUTF8StringEncoding];
//设置请求方式
(大写)
如:
POST(必须要设置)
GET(可以不设置,因为默认是GET)
[request
setHTTPMethod:@"POST"];
//需要把上传的data放进request里面
[request
setHTTPBody:postData];
//连接服务器
NSData *data
= [NSURLConnection
sendSynchronousRequest:request
returningResponse:nil
error:nil];
//解析数据
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:data
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"%@",dict);
}
异步
#import
"ViewController.h"
@interface
ViewController ()<</span>NSURLConnectionDataDelegate>//遵循代理
@property
(nonatomic,
strong)
NSMutableData *resultData;
@end
[b]
//get[b]异步[/b][/b]
-
(IBAction)getY:(id)sender
{
//通过地址字符串,创建url
NSString *urlString
=
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
NSURL *url
= [NSURL
URLWithString:urlString];
//通过url,创建请求
NSURLRequest *request
= [NSURLRequest
requestWithURL:url];
#pragma mark -----block
//调用带有block回调的方法,执行网络请求
//参数
1: NSURLRequest
//参数
2: block块里面的代码在哪个线程执行
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]
completionHandler:^(NSURLResponse
*
_Nullable response,
NSData *
_Nullable data,
NSError *
_Nullable connectionError)
{
//respone
携带的是借口的一些信息
//data
请求下来的数据信息(需要使用的)
//connectionError
错误信息
if (connectionError
==
nil)
{
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:data
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"%@",dict);
//这里应该刷新UI了
//1 :
给数据源数组赋值
//2 :
赋值结束之后,刷新UI
([[self.tableView reloadData])
//原则
:
主线程只负责更新UI
}
}];
#pragma mark -----代理
//代理的异步网络请求(GET)
//参数
1: NSURLRequest
//参数
2:代理
[NSURLConnection
connectionWithRequest:request
delegate:self];
}
[b]//post[b]异步[/b][/b]
-
(IBAction)postY:(id)sender
{
//通过地址字符串,创建url
NSString *urlString
=
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
NSURL *url
= [NSURL
URLWithString:urlString];
//通过url,创建请求
NSMutableURLRequest *request
= [NSMutableURLRequest
requestWithURL:url];
//因为POST通过data给服务器传输数据,所有通过string创建data
NSString *dataString
=
@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
NSData *postData
= [dataString
dataUsingEncoding:NSUTF8StringEncoding];
//设置请求方式
[request
setHTTPMethod:@"POST"];
//设置body,
[request
setHTTPBody:postData];
#pragma
mark ----block
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]
completionHandler:^(NSURLResponse
*
_Nullable response,
NSData *
_Nullable data,
NSError *
_Nullable connectionError)
{
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:data
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"%@",dict);
}];
#pragma mark ----代理
[NSURLConnection
connectionWithRequest:request
delegate:self];
}
#pragma
mark
-----NSURLConnectionDataDelegate协议方法
//开始响应
-
(void)connection:(NSURLConnection
*)connection
didReceiveResponse:(NSURLResponse
*)response{
//初始化保存结果的data
self.resultData
=
[NSMutableData
data];
}
//接收到数据
//这个方法会重复的执行,所以可能拿到一段一段的数据.这就是需要我们把这些数据拼接起来
- (void)connection:(NSURLConnection
*)connection
didReceiveData:(NSData
*)data{
//为了防止
拿到的数据不全,所以把拿到的数据拼接到保存结果的data中.
[self.resultData
appendData:data];
}
//结束响应
- (void)connectionDidFinishLoading:(NSURLConnection
*)connection{
//
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:self.resultData
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"异步代理
---> %@",dict);
//更新数据源数组
//刷新UI
}
@end
Policy n. 政策,方针;保险单
Interval n.
间隔;间距;
Synchronous adj. 同步的;同时的
Fragments n. 碎片(fragment的复数);片断;[计]
分段
Method n.
方法;条理
Asynchronous adj.
[电] 异步的;不同时的
Operation n. 操作;经营;[外科] 手术;[数][计]
运算
Queue n. 队列;长队;辫子
http和https
URL全称是Uniform Resource
Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源
URL就是资源的地址,位置,互联网上的每个资源都有一个唯一的URL
URL的基本格式=
协议://主机地址/路径
协议:不同的协议,代表着不同的资源查找方式,资源传输方式{ftp://(文件传输协议), http://(超文本传输协议), https://(安全超文本传输协议), file:// (本地文件协议)
}
主机地址:存放资源的主机的IP地址(地域)
路径:资源在主机的位置
HTTP协议, Hyper Transfer Protocol
(超文本传输协议)
是用于万维网(WWW)服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.
工作原理: HTTP协议采用请求/响应模型.
客户端向服务器发送一个请求报文,服务器以一个状态作为响应.
HTTPS: 安全超文本传输协议
它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版.
HTTPS协议使用SSL在发送方和接受方通过交换共知的秘钥来实现.因此,传送的数据不容易被网络黑客截取和解密.
SSL是Netscape公司所提出的安全保密协议,在浏览器和web服务器之间构造安全通道来进行数据传输,SSL运行TCP/IP
层值上,应用层之下,为应用程序提供加密数据通道.
异同:
https协议需要到ca申请证书,一般免费证书很少,需要交费
http是超文本传输协议,信息是明文传输,https则是具有安全性的加密传输协议
http和https是用的是完全不同的链接方式,用的端口也不一样,前者是后者是443
http的链接很简单,是无状态的
https是协议是由SSL + HTTP
协议构建的可进行加密传输,身份认证的网络协议 要比http安全
请求方式: GET 和 POST ;
连接方式:
同步连接:程序容易出现卡死现象
异步链接:等待数据返回
异步连接有两种实现方式:
设置代理,接收数据
实现block
注意
网络请求,允许
Http
请求
NSAppTransportSecurity 类型 Dictionary
下添加
NSAllowsArbitraryLoads
类型
Boolean ,值设为
YES
同步GET
:
创建一个地址字符串,注意: 不要有空格
创建一个统一资源定位符(URL)
创建一个NSURLRequest,并配置缓存策略和超时时间
通过一个NSData对象获取网络请求的数据
同步POST:
创建一个地址字符串,注意: 不要有空格
创建一个统一资源定位符
使用NSMutableURLRequest.
因为之后要对request做更改
创建一个上传数据的字符串,并且转成NSData对象
设置请求方式
(setHTTPMethod)
设置上传的Data(setHTTPBody)
通过一个NSData对象获取网络请求的数据
POST和GET的区别:
POST设置请求方式
GET设置Body
同步GET和POST的缺点:
会造成程序的卡顿,所以在开发中不推荐使用
[b]
//get[b]同步[/b][/b]
-
(IBAction)getT:(id)sender
{
//地址字符串
NSString *urlString
=
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
//统一资源定位符
(URL)
NSURL *url
= [NSURL
URLWithString:urlString];
//创建网络请求
(通过URL)
//参数
1:
统一资源定位符
//参数
2:
缓存协议(策略)
//参数
3:
有效时间(超出时间)
NSURLRequest *request
= [NSURLRequest
requestWithURL:url
cachePolicy:(NSURLRequestReloadIgnoringLocalCacheData)
timeoutInterval:60.0f];
//连接服务器,接收数据
//NSURLConnection
在9.0之后不推荐使用
//参数
1 : NSURLRequest
类型的对象
//参数
2 :
存储的是一些网络请求的信息,一般为nil
//参数
3 :
错误信息
NSData *data
= [NSURLConnection
sendSynchronousRequest:request
returningResponse:nil
error:nil];
NSLog(@"%@",data);
//解析数据
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:data
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"%@",dict);
}
[b]
//post[b]同步[/b][/b]
-
(IBAction)postT:(id)sender
{
//创建URL
NSString *string
=
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
NSURL *url
= [NSURL
URLWithString:string];
//创建请求
NSMutableURLRequest *request
= [NSMutableURLRequest
requestWithURL:url];
NSString *dataString
=
@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
//把这个字符串转成NSData类型的对象
NSData *postData
= [dataString
dataUsingEncoding:
NSUTF8StringEncoding];
//设置请求方式
(大写)
如:
POST(必须要设置)
GET(可以不设置,因为默认是GET)
[request
setHTTPMethod:@"POST"];
//需要把上传的data放进request里面
[request
setHTTPBody:postData];
//连接服务器
NSData *data
= [NSURLConnection
sendSynchronousRequest:request
returningResponse:nil
error:nil];
//解析数据
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:data
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"%@",dict);
}
异步
#import
"ViewController.h"
@interface
ViewController ()<</span>NSURLConnectionDataDelegate>//遵循代理
@property
(nonatomic,
strong)
NSMutableData *resultData;
@end
[b]
//get[b]异步[/b][/b]
-
(IBAction)getY:(id)sender
{
//通过地址字符串,创建url
NSString *urlString
=
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
NSURL *url
= [NSURL
URLWithString:urlString];
//通过url,创建请求
NSURLRequest *request
= [NSURLRequest
requestWithURL:url];
#pragma mark -----block
//调用带有block回调的方法,执行网络请求
//参数
1: NSURLRequest
//参数
2: block块里面的代码在哪个线程执行
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]
completionHandler:^(NSURLResponse
*
_Nullable response,
NSData *
_Nullable data,
NSError *
_Nullable connectionError)
{
//respone
携带的是借口的一些信息
//data
请求下来的数据信息(需要使用的)
//connectionError
错误信息
if (connectionError
==
nil)
{
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:data
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"%@",dict);
//这里应该刷新UI了
//1 :
给数据源数组赋值
//2 :
赋值结束之后,刷新UI
([[self.tableView reloadData])
//原则
:
主线程只负责更新UI
}
}];
#pragma mark -----代理
//代理的异步网络请求(GET)
//参数
1: NSURLRequest
//参数
2:代理
[NSURLConnection
connectionWithRequest:request
delegate:self];
}
[b]//post[b]异步[/b][/b]
-
(IBAction)postY:(id)sender
{
//通过地址字符串,创建url
NSString *urlString
=
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
NSURL *url
= [NSURL
URLWithString:urlString];
//通过url,创建请求
NSMutableURLRequest *request
= [NSMutableURLRequest
requestWithURL:url];
//因为POST通过data给服务器传输数据,所有通过string创建data
NSString *dataString
=
@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
NSData *postData
= [dataString
dataUsingEncoding:NSUTF8StringEncoding];
//设置请求方式
[request
setHTTPMethod:@"POST"];
//设置body,
[request
setHTTPBody:postData];
#pragma
mark ----block
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]
completionHandler:^(NSURLResponse
*
_Nullable response,
NSData *
_Nullable data,
NSError *
_Nullable connectionError)
{
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:data
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"%@",dict);
}];
#pragma mark ----代理
[NSURLConnection
connectionWithRequest:request
delegate:self];
}
#pragma
mark
-----NSURLConnectionDataDelegate协议方法
//开始响应
-
(void)connection:(NSURLConnection
*)connection
didReceiveResponse:(NSURLResponse
*)response{
//初始化保存结果的data
self.resultData
=
[NSMutableData
data];
}
//接收到数据
//这个方法会重复的执行,所以可能拿到一段一段的数据.这就是需要我们把这些数据拼接起来
- (void)connection:(NSURLConnection
*)connection
didReceiveData:(NSData
*)data{
//为了防止
拿到的数据不全,所以把拿到的数据拼接到保存结果的data中.
[self.resultData
appendData:data];
}
//结束响应
- (void)connectionDidFinishLoading:(NSURLConnection
*)connection{
//
NSDictionary *dict
= [NSJSONSerialization
JSONObjectWithData:self.resultData
options:(NSJSONReadingAllowFragments)
error:nil];
NSLog(@"异步代理
---> %@",dict);
//更新数据源数组
//刷新UI
}
@end
Policy n. 政策,方针;保险单
Interval n.
间隔;间距;
Synchronous adj. 同步的;同时的
Fragments n. 碎片(fragment的复数);片断;[计]
分段
Method n.
方法;条理
Asynchronous adj.
[电] 异步的;不同时的
Operation n. 操作;经营;[外科] 手术;[数][计]
运算
Queue n. 队列;长队;辫子
相关文章推荐
- 网络数据解析(2) JSON
- 网络数据解析(1) XML
- iOS开发网络篇—数据缓存
- App安全之网络传输安全
- 复杂网络节点重要性评价方法的对比-基于igraph C library
- 复杂网络社区结构发现算法-基于igraph 标签传播算法
- 复杂网络社区结构发现算法-基于python networkx clique渗透算法
- 复杂网络社区结构发现算法-基于igraph C library
- 复杂网络节点重要性评价方法初探
- C++ 网络通信和游戏逻辑分离
- 新炬网络-领先数据资产运营商 | 数据资产管理 | 数据库运维 | 自动化运维
- http请求返回405 和404
- 在 Windows 下将免安装版的 Apache HTTP 或 Apahce Tomcat 作为服务 开机并在后台自动启动
- golang使用net/http实现一对客户端和服务器连接的例子
- BZOJ4538 : [Hnoi2016]网络
- iOS9 http与https
- TCP定时器
- Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码(用socket解释http,不错)
- 面临巨大诱惑与最严监管 网络直播何去何从?
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包