OC语言知识6

本文目录

  • 一、异步POST请求
  • 二、NSURLConnection的其他请求方法

上一讲介绍了iOS中的异步GET请求,这讲来看看异步POST请求。

回到顶部

一、异步POST请求

假如请求路径是http://192.168.1.102:8080/MJServer/login,请求参数有2个:

  • username :母鸡
  • pwd :123

1.POST请求细节分析

要想在iOS中发送一个POST请求,首先要了解POST请求的一些细节:

1> 跟GET请求不一样的是,POST请求的请求参数不是拼接在请求路径后面,而是以请求体的形式发送到服务器端。

2> POST请求需要发送两部分的数据到服务器端:

* 请求体内容:所有的请求参数

username=%E6%AF%8D%E9%B8%A1&pwd=123

中文参数需要进行编码,参数"母鸡"被编码成"%E6%AF%8D%E9%B8%A1"

 

* 请求头信息:请求体长度、请求数据的类型

(这是我在FireBug中模拟POST请求的截图)

Content-Length是指请求体长度,Content-Type是指请求数据类型

 

2.POST请求代码实现

复制代码
 1 // 请求地址2 NSString *urlString = @"http://192.168.1.102:8080/MJServer/login";3 // 初始化一个NSURL对象4 NSURL *url = [NSURL URLWithString:urlString];5 6 // 初始化一个请求7 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];8 // 设置请求方法9 request.HTTPMethod = @"POST";
10 // 60秒请求超时
11 request.timeoutInterval = 60;
12 
13 // 拼接请求参数
14 NSString *params = @"username=母鸡&pwd=123";
15 // 对字符串进行编码后转成NSData对象
16 NSData *data = [params dataUsingEncoding:NSUTF8StringEncoding];
17 // 设置请求体
18 request.HTTPBody = data;
19 
20 // 设置请求头信息-请求体长度
21 NSString *contentLength = [NSString stringWithFormat:@"%i", data.length];
22 [request setValue:contentLength forHTTPHeaderField:@"Content-Length"];
23 // 设置请求头信息-请求数据类型
24 [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
25 
26 // 初始化一个连接
27 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];
28 // 开始一个异步请求
29 [conn start];
复制代码

1> 在18行设置了请求体内容

2> 从第21~24行设置了请求头信息

3> 其实,第21~24行代码可以省略。只要我们在第18行设置了请求体,系统在发送POST请求时,会自动根据请求体内容加上相应的请求头信息

 

回到顶部

二、NSURLConnection的其他请求方法

除了start方法,NSURLConnection还提供了2个静态方法帮助我们发送HTTP请求

1.异步请求

复制代码
 1 // 请求地址2 NSString *urlString = @"http://192.168.1.102:8080/MJServer/login?username=123&pwd=123";3 // 初始化一个NSURL对象4 NSURL *url = [NSURL URLWithString:urlString];5 6 // 初始化一个请求7 NSURLRequest *request = [NSURLRequest requestWithURL:url];8 9 // 初始化一个操作队列
10 NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
11 // 发送一个异步请求
12 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
13 ^(NSURLResponse *response, NSData *data, NSError *error) {
14     // 解析成字符串数据
15     NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
16     NSLog(@"%@", str);
17 }];
复制代码

在12行调用sendAsynchronousRequest:queue:completionHandler:方法发送一个异步HTTP请求,这个方法接收3个参数

* 第1个参数是一个NSURLRequest对象,封装的是一个GET请求

* 第3个参数是一个Block,当服务器成功返回数据时会回调这个Block,Block中的NSData *data参数就是服务器返回的数据

* 第2个参数是一个操作队列NSOperationQueue,当服务器成功返回数据时,系统会将第3个参数中传入的Block放到这个操作队列中执行

 

2.同步请求

前面说的都是异步请求,也是比较推荐的请求方式。NSURLConnection也提供了一个静态方法可以发送一个同步请求。

复制代码
 1 // 请求地址2 NSString *urlString = @"http://192.168.1.102:8080/MJServer/login?username=123&pwd=123";3 // 初始化一个NSURL对象4 NSURL *url = [NSURL URLWithString:urlString];5 6 // 初始化一个请求7 NSURLRequest *request = [NSURLRequest requestWithURL:url];8 9 // 发送一个同步请求
10 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
11 
12 // 解析成字符串数据
13 NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
14 NSLog(@"%@", str);
复制代码

在第10行调用了sendSynchronousRequest:returningResponse:error:方法发送了一个同步请求,这是一个阻塞式的方法,也就是等服务器返回所有数据后,这个方法才会返回,返回值是一个NSData对象,存放着服务器返回的所有数据

转载于:https://www.cnblogs.com/jameslbj/p/4290482.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

散列表(字典)

文章目录问题散列函数应用案例将散列表用于查找防止重复将散列表用作缓存冲突性能装填因子良好的散列函数小结问题 你在一家杂货店上班。有顾客来买东西时,你得在一个本子中查找价格。 如果本子的内容不是按字母顺序排列的,你可能为查找苹果&#xff0…

谁能引领国内人工智能芯片产业突围?

来源:国金证券摘要:我们认为中国在处理器/芯片领域的投资有加速的迹象,AI芯片的创业企业目前已达到40家左右。未来因人工智能边缘运算推理端和云端推理(Inferencing)芯片及设备成本,性能,耗电,效率的考量,以及各种处理器的特性不同…

OC语言知识12

本文目录 一、添加一个简单的图层二、添加一个显示图片的图层三、为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型,而不用UIColor和UIImage?四、UIView和CALayer的选择五、UIView和CALayer的其他关系* 上一讲已经说过,UIView内部默认…

计算机视觉介绍

1.为什么要学习图像处理和计算机视觉 计算机视觉市场需求大,其是人工智能的重要分支。 计算机视觉岗位占所有AI岗位的40%。 但是,中国高校目前尚未设置计算机视觉学科己专业;学习者众多,学习分散,缺少统一教学体系&a…

认识工业互联网

来源:智汇工业摘要:工业互联网是实现智能制造的抓手,推动工业互联网是长期的工作。工业互联网分为广义的工业互联网和狭义的工业互联网。广义的工业互联网就是第四次工业革命的代名词。和德国工业4.0以及中国制造2025类同,都是工业…

模式识别:绪论

模式识别(pattern recognition):输入原始数据并根据其类别采取相应行为的能力。 具体实例:人脸识别、语音识别、文字识别、指纹识别、DNA序列分析。 要区分不同类别的个体,需要利用其一些物理特性上的差异,成为模式分类的特征。…

A16Z内部万字报告:人类与AI结合的最佳形态

来源:36Kr摘要:人工智能技术正在快速发展,将会给我们什么样的变化?人们应该如何与人工智能相处?近日,A16Z博客上放出了一篇内部报告,介绍了人工智能将会给我们的社会带来的变化,以及…

照明与图像

光通量: 人眼所能感受到的辐射功率,等于单位时间内某一波段的辐射能量和该波段的相对视见率的乘积。单位是lm(流明)1流明 0.00146瓦 辐照度 投射到一平表面上的辐射通量密度。指到达一表面上,单位时间,单位面积上的辐射能。以…

BZOJ3434 [Wc2014]时空穿梭

摔电脑摔电脑!JZP业界毒瘤! 400题纪念~哇终于上400了的说!!!好不容易欸! 题解什么的还是Orz iwtwiioi 我求组合数的方法明明是O(n)的,为什么这么慢!!!令人报警…

图像平滑滤波

卷积与滤波概念 离散卷积 丢两个骰子,求点数加起来为 ttt 的概率是多少? 两个骰子加起来为4的概率: f(1)g(3)f(2)g(2)f(3)g(1)f(1)g(3) f(2)g(2) f(3)g(1)f(1)g(3)f(2)g(2)f(3)g(1) 写成卷积标准形式为: (f∗g)(4)∑i13f(i)g(…

fast-json.jar的用法

fast-json.jar 解析json数据:一种json数据解析方式是这种,点击这里下载jsonfast.jarfastjsonAPI文档 [{"id": 6378,"title": "test","img": "http://image.jxvdy.com/2014/0929/5428d91c9e6dc8f78fd99_0.p…

从全球制造业的迁移史,看中国制造业未来会怎么走?

来源:挖数(ID:washu66)摘要:中国制造后续如何发展?翻开全球制造业的迁移史,看是否能从中看出一点端倪。1/ 全球制造业的迁移史1/ 第一次大迁移第一次制造业大迁移发生在20世纪初,由美…

应用|5G时代10大应用场景!

来源:数字化企业摘要:5G商用日益临近,大家可曾想过5G技术未来有哪些具体的应用场景呢?作为5G领跑者的华为公司,早在2年前就出了一份白皮书,这份报告探讨了最能体现5G能力的十大应用场景。简要列表如下1.云V…

标准控件(二)——Calendar

Calendar 日程控件 属性 Borderstyle 边框样式 DayNameFormat 日标头的文本格式 FirstDayOfWeek NextPrevFormat 月导航按钮的格式 方法 DayRender() 在呈现日时激发 protected void Calendar1_DayRender(object sender,…

央行发布论文:区块链能做什么,不能做什么?

来源:悟空智能科央行发布工作论文《区块链能做什么、不能做什么?》,论文称,不要夸大或迷信区块链的功能。区块链应用要立足实际情况。目前区块链投融资领域泡沫明显。论文从经济学角度研究了区块链的功能。首先,在给出…

证明积分

证明积分:$$\int_{-\pi/2}^{\pi/2} (\sin(x))^n dx \frac{n-1}{n}\int_{-\pi/2}^{\pi/2} (\sin(x))^{n-2} dx$$ 证明: \begin{align}\int_{-\pi/2}^{\pi/2} \sin^nx \, dx& -\sin^{n-1}x \cos x\bigg|_{-\pi/2}^{\pi/2} \int_{-\pi/2}^{\pi/2} \co…

图像变换

图像变换有什么用? 图像变换意义: 图像的特征更为突出原来无法直接观测的特征直接显现出来需要提取图像中的特征,便于后续处理及图像理解 常见图像变换: 几何变换:图像放缩、图像平移、图像旋转、图像镜像、图像翻…

UVa 1225 Digit Counting

题意&#xff1a;给出n,将前n个整数顺次写在一起&#xff0c;统计各个数字出现的次数。 用的最笨的办法--直接统计-- 后来发现网上的题解有先打表来做的 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 us…

人工智能产业发展联盟公布首轮AI芯片基准评测结果,评估工具已开源

来源&#xff1a;量子位3月6日&#xff0c;由国际电信联盟、中国信息通信研究院联合主办&#xff0c;人工智能产业发展联盟&#xff08;AIIA&#xff09;和中兴通讯承办的国际论坛“AI in 5G——引领新时代论坛”在深圳召开。来自全球电信运营商、标准组织、互联网企业、设备厂…

软件工程概论第七章

面向对象分析 分析的概念主要有分析类&#xff0c;和分析活动其中分析类中的主要有实体类&#xff0c;边界类&#xff0c;和控制类。知道了分析类主要类型&#xff0c;怎样识别分析类&#xff0c;边界类通常 一个参与者和一个用例之间的交互或通信关联对应一个边界类。控制类负…