网络编程 同步异步加载 SET POST
2015-12-08 09:38
519 查看
/**
* 创建NSData类型对象,
用来接收异步请求回得数据
*/
@property(nonatomic,
retain) NSMutableData *asyData;
@end
@implementation ViewController
/*
gat和post的区别:
1.请求方式
参数部分: get采用字符串直接拼接的方法, post使用NSData类型数据拼接.
对安全性产生了影响. NSData类型使用二进制数,
不直接看到值. 相当于密文方式.
2.容量大小 get请求最多允许255字节的字符串, post的采用NSData最大可超过1G.
3.使用get更多,
因为简单.
同步请求弊端:
等所有信息全部返回之后才能显示下一步操作. 容易出现卡死现象.
大量数据时不能用.
*/
/*
同步请求的特点: 一旦发送请求,
当前程序一直等待获得全部响应信息, 才可以进行下一步操作. (页面假死现象)
*/
- (IBAction)getSyn:(id)sender {
NSLog(@"开始get同步方法");
//第一步:
获取地址
NSString *urlStr =
@"http://p1.pichost.me/i/40/1639665.png";
//第二步:
创建url对象
NSURL *url = [NSURL
URLWithString:urlStr];
//第三步:
创建网络请求对象 (NSURlRequest)
NSURLRequest *request = [NSURLRequest
requestWithURL:url];
//第四步:
创建响应对象 (NSURLResponse)
NSURLResponse *response =
nil;
//错误信息
可有可无
//如果网络有错误,
可以用来接收错误信息
NSError *error = nil;
//第五步:
创建网络链接,
并且获得返回的NSData
/**
* 参数说明: 1.请求对象; 2.用来接收响应的对象 (两个**
取址) 3.错误信息
*/
NSData *data = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&response error:&error];
//如果请求错误,
打印错误信息
if (error) {
NSLog(@"%@", error);
}else{
//进行数据解析
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:nil];
NSLog(@"%@", dic);
}
}
- (IBAction)postSyn:(id)sender {
NSLog(@"开始post同步方法");
//第一步:
获得地址
NSString *string =
@"http://mapi.pianke.me/pub/jing";
//第二步:
创建url对象
NSURL *url = [NSURL
URLWithString:string];
//第三步:
创建请求对象 (需要设置请求方式,
并且拼接参数, 所以需要使用可变的请求对象)
//参数不是都写在网址中的
NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url];
//第四步:设置请求方式(默认是GET,
注意: POST全大写)
//默认为get请求方式
[request
setHTTPMethod:@"POST"];
//第五步:
拼接POST请求参数部分
// (1).
获得参数字符串
//参数部分
NSString *bodyStr =
@"auth=CJFm1FH259KJDCsF1Gs3ikDJxQMejNrOMom1lsDzRlcWP22NJPSh5a7m34&client=1&did=DC7311B8-4DFE-4BC2-99D9-565BF1215670&version=3.0.6";
// (2).
将参数字符串转化成NSData类型对象
//
方法: dataUsingEncoding 指定编码格式
NSData *bodyData = [bodyStr
dataUsingEncoding:NSUTF8StringEncoding];
//第六步:
设置请求参数
[request
setHTTPBody:bodyData];
//第七步:
设置响应对象和错误信息
NSURLResponse *response =
nil;
NSError *errol = nil;
//第七步:
建立网络链接, 获得响应数据
NSData *data = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&response error:&errol];
//最后一步:
进行数据解析
if (errol) {
NSLog(@"%@", errol);
}else{
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:nil];
NSLog(@"%@", dic);
}
}
- (IBAction)gatAsy:(id)sender {
NSLog(@"开始get的异步请求方法");
//1, 2
创建URL对象
NSURL *url = [NSURL
URLWithString:@"http://p1.pichost.me/i/40/1639665.png"];
//3.
创建网络请求对象 (NSURLRequest)
NSURLRequest *request = [NSURLRequest
requestWithURL:url];
//4.创建网络链接对象 (NSURLConnection)
//参数说明: 1.请求对象 2.代理人
NSURLConnection *connection = [NSURLConnection
connectionWithRequest:request
delegate:self];
//5.建立连接
[connection
start];
}
#pragma mark 获得响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response
{
NSLog(@"获得服务器响应");
//数据源,
最晚需要在获得响应时创建
self.asyData = [[NSMutableData
alloc]init];
}
#pragma mark 获得响应数据 (这个方法会多次执行,
每次获得部分响应信息)
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"获得响应数据");
//每次调用这个方法,
返回一些data
//Data不一起给,
这个方法会执行多次,
每次拼接到上次的Data后, Data必须为NSMutableData
[self.asyData
appendData:data];
}
#pragma mark 接收响应信息结束
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//进行数据解析
NSLog(@"完成数据加载,
结束接收响应");
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:self.asyData
options:0
error:nil];
NSLog(@"%@", dic);
}
#pragma mark POST异步请求 (Block实现)
- (IBAction)postAsy:(id)sender {
NSLog(@"Post异步方法");
//第一步:
获得地址
NSString *string =
@"http://mapi.pianke.me/pub/jing";
//第二步:
获得URL对象
NSURL *url = [NSURL
URLWithString:string];
//第三步:
创建网络请求对象
NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url];
//第四步:
请求方式
[request
setHTTPMethod:@"POST"];
//获得请求参数
//(1).
获得参数字符串
NSString *bodyStr =
@"auth=CJFm1FH259KJDCsF1Gs3ikDJxQMejNrOMom1lsDzRlcWP22NJPSh5a7m34&client=1&did=DC7311B8-4DFE-4BC2-99D9-565BF1215670&version=3.0.6";
//(2).
将参数字符串转化成NSData对象
NSData *bodyData = [bodyStr
dataUsingEncoding:NSUTF8StringEncoding];
//第六步:
设置请求参数
[request
setHTTPBody:bodyData];
//第七步:
开始异步请求
/**
* 参数说明
*
1.请求对象
2.主线程
3.Block
* @param response
响应对象
* @param data
响应数据
* @param connectionError
错误信息
*
* @return
*/
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]completionHandler:^(NSURLResponse *response,
NSData *data, NSError *connectionError) {
//Block内部获得的Data是完整的
if (connectionError) {
NSLog(@"%@", connectionError);
}else{
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:0 error:nil];
NSLog(@"%@", dic);
}
}];
}
#pragma mark 改变背景颜色
- (IBAction)changeBackgroundColor:(id)sender{
self.view.backgroundColor = [UIColor
orangeColor];
}
* 创建NSData类型对象,
用来接收异步请求回得数据
*/
@property(nonatomic,
retain) NSMutableData *asyData;
@end
@implementation ViewController
/*
gat和post的区别:
1.请求方式
参数部分: get采用字符串直接拼接的方法, post使用NSData类型数据拼接.
对安全性产生了影响. NSData类型使用二进制数,
不直接看到值. 相当于密文方式.
2.容量大小 get请求最多允许255字节的字符串, post的采用NSData最大可超过1G.
3.使用get更多,
因为简单.
同步请求弊端:
等所有信息全部返回之后才能显示下一步操作. 容易出现卡死现象.
大量数据时不能用.
*/
/*
同步请求的特点: 一旦发送请求,
当前程序一直等待获得全部响应信息, 才可以进行下一步操作. (页面假死现象)
*/
- (IBAction)getSyn:(id)sender {
NSLog(@"开始get同步方法");
//第一步:
获取地址
NSString *urlStr =
@"http://p1.pichost.me/i/40/1639665.png";
//第二步:
创建url对象
NSURL *url = [NSURL
URLWithString:urlStr];
//第三步:
创建网络请求对象 (NSURlRequest)
NSURLRequest *request = [NSURLRequest
requestWithURL:url];
//第四步:
创建响应对象 (NSURLResponse)
NSURLResponse *response =
nil;
//错误信息
可有可无
//如果网络有错误,
可以用来接收错误信息
NSError *error = nil;
//第五步:
创建网络链接,
并且获得返回的NSData
/**
* 参数说明: 1.请求对象; 2.用来接收响应的对象 (两个**
取址) 3.错误信息
*/
NSData *data = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&response error:&error];
//如果请求错误,
打印错误信息
if (error) {
NSLog(@"%@", error);
}else{
//进行数据解析
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:nil];
NSLog(@"%@", dic);
}
}
- (IBAction)postSyn:(id)sender {
NSLog(@"开始post同步方法");
//第一步:
获得地址
NSString *string =
@"http://mapi.pianke.me/pub/jing";
//第二步:
创建url对象
NSURL *url = [NSURL
URLWithString:string];
//第三步:
创建请求对象 (需要设置请求方式,
并且拼接参数, 所以需要使用可变的请求对象)
//参数不是都写在网址中的
NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url];
//第四步:设置请求方式(默认是GET,
注意: POST全大写)
//默认为get请求方式
[request
setHTTPMethod:@"POST"];
//第五步:
拼接POST请求参数部分
// (1).
获得参数字符串
//参数部分
NSString *bodyStr =
@"auth=CJFm1FH259KJDCsF1Gs3ikDJxQMejNrOMom1lsDzRlcWP22NJPSh5a7m34&client=1&did=DC7311B8-4DFE-4BC2-99D9-565BF1215670&version=3.0.6";
// (2).
将参数字符串转化成NSData类型对象
//
方法: dataUsingEncoding 指定编码格式
NSData *bodyData = [bodyStr
dataUsingEncoding:NSUTF8StringEncoding];
//第六步:
设置请求参数
[request
setHTTPBody:bodyData];
//第七步:
设置响应对象和错误信息
NSURLResponse *response =
nil;
NSError *errol = nil;
//第七步:
建立网络链接, 获得响应数据
NSData *data = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&response error:&errol];
//最后一步:
进行数据解析
if (errol) {
NSLog(@"%@", errol);
}else{
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:nil];
NSLog(@"%@", dic);
}
}
- (IBAction)gatAsy:(id)sender {
NSLog(@"开始get的异步请求方法");
//1, 2
创建URL对象
NSURL *url = [NSURL
URLWithString:@"http://p1.pichost.me/i/40/1639665.png"];
//3.
创建网络请求对象 (NSURLRequest)
NSURLRequest *request = [NSURLRequest
requestWithURL:url];
//4.创建网络链接对象 (NSURLConnection)
//参数说明: 1.请求对象 2.代理人
NSURLConnection *connection = [NSURLConnection
connectionWithRequest:request
delegate:self];
//5.建立连接
[connection
start];
}
#pragma mark 获得响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response
{
NSLog(@"获得服务器响应");
//数据源,
最晚需要在获得响应时创建
self.asyData = [[NSMutableData
alloc]init];
}
#pragma mark 获得响应数据 (这个方法会多次执行,
每次获得部分响应信息)
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"获得响应数据");
//每次调用这个方法,
返回一些data
//Data不一起给,
这个方法会执行多次,
每次拼接到上次的Data后, Data必须为NSMutableData
[self.asyData
appendData:data];
}
#pragma mark 接收响应信息结束
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//进行数据解析
NSLog(@"完成数据加载,
结束接收响应");
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:self.asyData
options:0
error:nil];
NSLog(@"%@", dic);
}
#pragma mark POST异步请求 (Block实现)
- (IBAction)postAsy:(id)sender {
NSLog(@"Post异步方法");
//第一步:
获得地址
NSString *string =
@"http://mapi.pianke.me/pub/jing";
//第二步:
获得URL对象
NSURL *url = [NSURL
URLWithString:string];
//第三步:
创建网络请求对象
NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url];
//第四步:
请求方式
[request
setHTTPMethod:@"POST"];
//获得请求参数
//(1).
获得参数字符串
NSString *bodyStr =
@"auth=CJFm1FH259KJDCsF1Gs3ikDJxQMejNrOMom1lsDzRlcWP22NJPSh5a7m34&client=1&did=DC7311B8-4DFE-4BC2-99D9-565BF1215670&version=3.0.6";
//(2).
将参数字符串转化成NSData对象
NSData *bodyData = [bodyStr
dataUsingEncoding:NSUTF8StringEncoding];
//第六步:
设置请求参数
[request
setHTTPBody:bodyData];
//第七步:
开始异步请求
/**
* 参数说明
*
1.请求对象
2.主线程
3.Block
* @param response
响应对象
* @param data
响应数据
* @param connectionError
错误信息
*
* @return
*/
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]completionHandler:^(NSURLResponse *response,
NSData *data, NSError *connectionError) {
//Block内部获得的Data是完整的
if (connectionError) {
NSLog(@"%@", connectionError);
}else{
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:0 error:nil];
NSLog(@"%@", dic);
}
}];
}
#pragma mark 改变背景颜色
- (IBAction)changeBackgroundColor:(id)sender{
self.view.backgroundColor = [UIColor
orangeColor];
}
相关文章推荐
- 网站title,太原网络营销师郭文军教你如何布局
- TCP可靠的传输机制
- 【BestCoder Round 65E】【网络流+讨论 奇偶分类思想】n个数形成若干至少3元素素数环的可行性检验 数可以为1
- http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html
- Xcode7.1 网络请求报错 -- @ShinePug
- php7+apache2.4 (Windows7下),成功启动。(楼主另外提供了1个php7集成环境打包: http://pan.baidu.com/s/1qXwjpF2 ,如果你只是想了解一下,放在d盘根目录。)
- fiddler Android下https抓包全攻略
- HTTP报文详解
- 10009---AngularJS Http
- 网络编程基础(1) : 网路模型简介+同步阻塞实例
- linux进程间的网络通信
- android Service onStartCommand intent为nullhttp://hold-on.iteye.com/blog/2024926
- virtualbox虚拟机上安装centOS的网络配置(安装centos时选择桥接网络)
- OC与Swift封装网络工具类
- HTTP请求状态码
- Xcode7 beta 网络请求报错:The resource could not be loade
- 封装AFNetworking网络工具类(Objective-C)
- 封装AFNetworking网络工具类(Swift)
- Http协议 详解
- PHP+Swoole网络通信框架