iosGET同步、异步请求

原创 2015年07月07日 02:20:09

一、同步GET

1
2
3
4
5
6
7
8
9
10
11
12
// 1.将网址初始化成一个OC字符串对象
NSString *urlStr = [NSString stringWithFormat:@”%@?query=%@®ion=%@&output=json&ak=6E823f587c95f0148c19993539b99295”, kBusinessInfoURL, @”银行”, @”济南”];
// 如果网址中存在中文,进行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 2.构建网络URL对象, NSURL
NSURL *url = [NSURL URLWithString:newUrlStr];
// 3.创建网络请求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
// 创建同步链接
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
当创建好同步链接以后, 就可以采用相应的方法进行解析。下面创建异步连接也是一样的。

二、同步POST

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 1.根据网址初始化OC字符串对象
NSString *urlStr = [NSString stringWithFormat:@”%@”, kVideoURL];
// 2.创建NSURL对象
NSURL *url = [NSURL URLWithString:urlStr];
// 3.创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 4.创建参数字符串对象
NSString *parmStr = @”method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10”;
// 5.将字符串转为NSData对象
NSData *pramData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];
// 6.设置请求体
[request setHTTPBody:pramData];
// 7.设置请求方式
[request setHTTPMethod:@”POST”];

// 创建同步链接
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

三、异步GET

1
2
3
4
5
6
7
8
9
10
11
NSString *urlStr = [NSString stringWithFormat:@”http://image.zcool.com.cn/56/13/1308200901454.jpg“];
NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:newStr];
NSURLRequest *requst = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
//异步链接(形式1,较少用)
[NSURLConnection sendAsynchronousRequest:requst queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
self.imageView.image = [UIImage imageWithData:data];
// 解析
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@”%@”, dic);
}];
四、异步POST

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// POST请求
NSString *urlString = [NSString stringWithFormat:@”%@”,kVideoURL];
//创建url对象
NSURL *url = [NSURL URLWithString:urlString];
//创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
//创建参数字符串对象
NSString *parmStr = [NSString stringWithFormat:@”method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10”];
//将字符串转换为NSData对象
NSData *data = [parmStr dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
[request setHTTPMethod:@”POST”];
//创建异步连接(形式二)
[NSURLConnection connectionWithRequest:request delegate:self];
一般的,当创建异步连接时, 很少用到第一种方式,经常使用的是代理方法。关于NSURLConnectionDataDelegate,我们经常使用的协议方法为一下几个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 服务器接收到请求时
- (void)connection:(NSURLConnection )connection didReceiveResponse:(NSURLResponse )response
{
}
// 当收到服务器返回的数据时触发, 返回的可能是资源片段
- (void)connection:(NSURLConnection )connection didReceiveData:(NSData )data
{
}
// 当服务器返回所有数据时触发, 数据返回完毕
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
}
// 请求数据失败时触发
- (void)connection:(NSURLConnection )connection didFailWithError:(NSError )error
{
NSLog(@”%s”, FUNCTION);
}
最后,分析一下这几种呢网络请求的区别。

GET请求和POST请求的区别:

  1. GET请求的接口会包含参数部分,参数会作为网址的一部分,服务器地址与参数之间通过 ? 来间隔。POST请求会将服务器地址与参数分开,请求接口中只有服务器地址,而参数会作为请求的一部分,提交后台服务器。

  2. GET请求参数会出现在接口中,不安全。而POST请求相对安全。

3.虽然GET请求和POST请求都可以用来请求和提交数据,但是一般的GET多用于从后台请求数据,POST多用于向后台提交数据。

同步和异步的区别:

同步链接:主线程去请求数据,当数据请求完毕之前,其他线程一律不响应,会造成程序就假死现象。

异步链接:会单独开一个线程去处理网络请求,主线程依然处于可交互状态,程序运行流畅。

版权声明:本文为博主原创文章,未经博主允许不得转载。

web中的同步请求和异步请求的差别(重点是ajax中的同步与异步)

此前,对于web中同步请求和异步请求的概念模糊不清,不过对于这样的知识盲点,不去克服的话都不好意思说自己是一名前端开发人员了[捂脸][捂脸]。还好,功夫不负有心人。通过自己的方式终于让自己理解了,这两...
  • u014516981
  • u014516981
  • 2016年11月20日 19:53
  • 6719

Ajax之同步请求和异步请求的区别

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的。信息错误又要重新填写! 异步是指:发送...
  • xiaotao_css
  • xiaotao_css
  • 2017年04月25日 18:34
  • 5877

okhttp 同步请求和异步请求

一、使用OkHttp OkHttp发送请求后,可以通过同步或异步地方式获取响应。下面就同步和异步两种方式进行介绍。 1.1、同步方式 发送请求后,就会进入阻塞状态,知道收到响应。下面看一个下载百...
  • renjianhhong
  • renjianhhong
  • 2017年03月31日 22:14
  • 2091

使用OkHttp进行网络同步异步操作

OkHttp是一个Java和Android的HTTP和HTTP/2的客户端,负责发送HTTP请求以及接受HTTP响应。 一、使用OkHttpOkHttp发送请求后,可以通过同步或异步地方式获取响应。...
  • qq_19431333
  • qq_19431333
  • 2016年11月06日 10:59
  • 8210

Swift - 同步请求和异步请求

(自iOS9.0起,NSURLConnection.sendSynchronousRequest被废除不用了。建议改用NSURLSession的dataTaskWithRequest方法。具体用法可以...
  • u014063717
  • u014063717
  • 2016年03月16日 09:57
  • 3658

HTTP请求异步和同步的区别

转自:http://kevinpeng.javaeye.com/blog/677797  举个例子:普通B/S模式(同步)AJAX技术(异步)  同步:提交请求->等待服务器处理->处...
  • u013063153
  • u013063153
  • 2016年10月08日 11:31
  • 1679

【Objective-C】Http常用API、同步请求与异步请求 /NSURLSession学习笔记(二)Session Task

参考 (1)http://blog.csdn.net/rongxinhua/article/details/20079607?utm_source=tuicool&utm_medium=referr...
  • lvchaman
  • lvchaman
  • 2015年12月14日 16:36
  • 3115

Retrofit2的再封装实战—同步与异步请求

前言 首先这篇文章是面向对Retrofit有了解的朋友,如果您对Retrofit并不了解,请自行查阅其用法,本文不会讲解Retrofit的基础用法。 写这篇文章的目的很简单: 1.为了让自己...
  • liner666
  • liner666
  • 2017年02月06日 10:17
  • 893

Http同步请求和异步请求

Http同步请求和异步请求区别 同步会阻塞线程,一直等到网络回调,而异步不会阻塞 同步可以设置TimeOut,异步则对TimeOut无视 异步需要自己对TimeOut进行计算,通过监听接收到网络回调 ...
  • lingyanpi
  • lingyanpi
  • 2016年11月26日 18:15
  • 6166

Java系列-Http同步和异步请求区别

举个例子:普通B/S模式(同步)AJAX技术(异步)  同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事  异步: 请求通过事件触发->服务器处理(这是浏览器仍然可...
  • Dream_angel_Z
  • Dream_angel_Z
  • 2015年04月04日 19:58
  • 4121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iosGET同步、异步请求
举报原因:
原因补充:

(最多只允许输入30个字)