当前位置: 首页 > 编程日记 > 正文

iOS 中的网络请求 (同步请求、异步请求、GET请求、POST请求)

1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,

2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行

3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;

4、POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。

5、同步和异步的区别在于连接方式不同:

同步用:

NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:Nil error:nil];

异步用:

NSURLConnection * connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];(需要在.h中指定代理)

6、同步GET请求

//第一步,创建URL NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720ed8bdbef079cb0a46f21fab4d.jpg"]; //第二步,通过URL创建request请求 NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15]; //NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒) //  其中缓存协议是个枚举类型包含: // //  NSURLRequestUseProtocolCachePolicy(基础策略) // //  NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存) // //  NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载) // //  NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作) // //  NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载) // //  NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载) //第三步,连接服务器 NSURLResponse * respones = nil; NSError * error = nil; NSData * reviced = [NSURLConnection sendSynchronousRequest:request returningResponse:&respones  error:&error]; //第四步,将数据转换成图片 UIImage * image = [[UIImage alloc]initWithData:reviced]; _imageView.image = image;

7.异步GET请求

//第一步,创建URL NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720ed8bdbef079cb0a46f21fab4d.jpg"]; //第二步,通过URL创建request请求 NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15]; //第三步,连接服务器 [NSURLConnection connectionWithRequest:request delegate:self];//(需要在.h中指定代理方法) 
//接受到服务器的回应调用 
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ [self.reviceData setLength:0 ]; } 
//数据传输中一直调用 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ [self.reviceData appendData:data]; } 
//数据传输完才会调用 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ UIImage * image = [[UIImage alloc]initWithData:self.reviceData]; _imageView.image = image; }

8、同步POST请求

//第一步,创建URL NSURL * url = [[NSURL alloc]initWithString:@"http://api.hudong.com/iphonexml.do"]; 
//第二步,通过URL创建可变的request请求(只有创建可变的request才能设置POST请求) NSMutableURLRequest * request1 = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:100]; //timeoutInterval:post超时最大时间是240秒,在方法中设置多少秒也没用。 //第三步,设置POST请求方式 [request1 setHTTPMethod:@"POST"]; 
//第四步,设置参数 NSString * bodyStr = @"type=focus-c"; NSData * body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; [request1 setHTTPBody:body]; 
//第五步,连接服务器 NSData * data = [NSURLConnection sendSynchronousRequest:request1 returningResponse:nil error:nil]; NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",str);

9、异步POST请求

//第一步,创建URL NSURL * url = [[NSURL alloc]initWithString:@"http://api.hudong.com/iphonexml.do"]; 
//第二步,通过URL创建可变的request请求(只有创建可变的request才能设置POST请求) NSMutableURLRequest * request1 = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:100]; //timeoutInterval:post超时最大时间是240秒,在方法中设置多少秒也没用。 //第三步,设置POST请求方式 [request1 setHTTPMethod:@"POST"]; 
//第四步,设置参数 NSString * bodyStr = @"type=focus-c"; NSData * body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; [request1 setHTTPBody:body]; 
//第五步,连接服务器 
[[NSURLConnection alloc]initWithRequest:request2 delegate:self] //接受到服务器的回应调用 
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ [self.reviceData setLength:0 ]; } 
//数据传输中一直调用 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ [self.reviceData appendData:data]; } 
//数据传输完才会调用 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ NSString * str = [[NSString alloc]initWithData:self.reviceData encoding:NSUTF8StringEncoding]; NSLog(@"%@",str); 
}

转载于:https://www.cnblogs.com/onecrow/articles/5054928.html

相关文章:

springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux...

1 //我的会员中心 头像上传接口2 /*windows 调试*/3 Value("${appImg.location}")4 private String winPathPic;5 /*linux 使用*/6 Value("${img.location}")7 private String linuxPathPic;8 9 PostMapping(value "/file")10 public String f…

个人所得税计算器2016 by Jacksile

个人所得税计算器2016 个人所得税计算器2016 税前薪资:元各项社会保险费:元起征点:35004800元应缴税款:元实发薪资:元个人所得税计算公式 应纳税额 应纳税所得额 x 税率 - 速算扣除数 应纳税所得额 工资收…

interface IEngineControl封装引擎通用操作

using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace SIAT {namespace Engine{/******************************************************************** 引擎控制接口,该类封装一些引擎中通用的操作* * ***********…

iOS 导航栏遮挡问题 --- iOS开发系列 ---项目中成长的知识七

不知大家有没有遇见过自己写的tableview被导航栏遮挡住的问题,反正我是遇见过! 因为在ios7以后所有的UIViewController创建后默认就是full Screen的,因此如果带导航栏的应用界面中的部分控件会被导航栏覆盖掉。 解决方案:可以使用ios7中的UIViewControll…

程序员笔记|如何编写优雅的Dockerfile

导读 Kubernetes要从容器化开始,而容器又需要从Dockerfile开始,本文将介绍如何写出一个优雅的Dockerfile文件。 文章主要内容包括: Docker容器 Dockerfile 使用多阶构建感谢公司提供大量机器资源及时间让我们可以实践,感谢在此专…

Oracle面试问题汇总

1:SqL 优化 1:尽量避免使用 select * 查询方式 因为oracle 在解析过程中 会将*依次转化成所以的列名。 2:减小访问数据库的次数 因为每执行一条sql语句的时候,oracle内部会做许多的事情 如:解析sql ,估算索引的利用效率…

相关性分析p值_一行代码掌握皮尔逊相关分析,洞察变量关系

变量类型与推荐的假设检验方法可以看到,当我们探索两个连续变量之间的关系时,相关分析是一个很好的选择。那么,相关分析的原理是什么?如何在Python中实现相关分析呢?一、Pearson相关系数针对两个独立的服从正态分布的连…

润前报表简单问题

Q:设计器如何打开A:如果是安装的,那么直接到菜单下,打开润乾报表设计器就行了,如果是压缩包或者从别人那儿拷过来的,就运行\reportHome\bin下面的startup.bat就可以打开了。 Q:做一个报表最基本…

一个简单的slider滑块组件

2019独角兽企业重金招聘Python工程师标准>>> 我们先来看一张图片&#xff1a; 要实现这样的效果我们有很多种方法&#xff0c;比如直接使用<input type"range" />修改样式即可&#xff0c;也可用下面的这种方式修改 样式 HTML代码&#xff1a; <…

压测接口线程数设置_ZAT掌门性能压测巡检系统实战和落地

项目背景随着业务拓展&#xff0c;对于接口性能的要求也在上升&#xff0c;各部门也开始针对部分慢接口进行优化&#xff0c;从测试角度针对这些优化需求进行测试时不仅要保证对应接口的功能正常使用同时也要验证接口优化成果。在日常的开发工作中一些后台服务配置的改动也会对…

01python语言程序设计基础——初识python

1.python的字符串中format函数用法 format 函数可以接受不限个参数&#xff0c;位置可以不按顺序。In [2]:"{} {}".format("hello", "world") # 不设置指定位置&#xff0c;按默认顺序Out[2]:hello world In [3]:"{0} {1}".format(&q…

没有什么不可能(1)

近在读一本书《没有什么不可能》&#xff0c;书中宗旨就是&#xff1a;这个世界没有什么不可能&#xff0c;每个人的脚下都有一条通往成功的道路&#xff0c;信念是一切力量的源泉。这本书看了三分之一&#xff0c;跟大家分享一下前三个观点。 1、只有想不到&#xff0c;没有做…

浅浅认识之VBS脚本访问接口与COMODO拦截COM接口

这2天测试了一个使用了WMI提供ASEC后门&#xff0c;里面使用了JS脚本往外请求http获取执行命令。但我的分析系统却没抓到这个行为&#xff0c;可在真机中确实抓到有HTTP请求。相当奇怪。 最后无奈windbg出手&#xff0c;内核断点afd 发送函数。最后发现是scrcons.exe进程&#…

redis最大储存512m_redis系列篇01

今天写的这篇是redis系列的文章&#xff0c;我的安排是由浅入深写redis系列。本篇是简单的介绍入门&#xff0c;后续的文章会详细讲解redis深层次的知识。欢迎大家关注我的微信公众号&#xff1a;码农Bug首先说几个简单的命令&#xff1a;keys *:查询所有的键值del key&#xf…

批处理命令——goto 和 :

谈起goto&#xff0c;相信大家应该想到的是面向过程编程。其实&#xff0c;这就相当于当有人向你谈起class&#xff0c;意味着你就懂得面向对象编程。如果你不懂&#xff0c;那么你们的沟通将会很困难。不懂我说的啥意思吗&#xff1f;请参见曾经分享王路的一篇文章《永远不要对…

浮动布局会受父框滚动条影响

此时的效果是&#xff1a;如果此时把父框的滚动条去掉或隐藏掉&#xff1a;而此时的效果是:总结:1 有时我们的布局发生了改变可能就是受到出现滚动条的影响了 而我们很容易忽略掉这一点转载于:https://blog.51cto.com/11871779/2387118

Delphi7的主窗口

Delphi7的主窗口转载于:https://www.cnblogs.com/LoveFishC/archive/2012/08/10/3845692.html

线程组多次调用_详细分析 Java 中启动线程的正确和错误方式

start 方法和 run 方法的比较代码演示:/** * * start() 和 run() 的比较 * * * author 踏雪彡寻梅 * version 1.0 * date 2020/9/20 - 16:15 * since JDK1.8 */public class StartAndRunMethod {public static void main(String[] args) {// run 方法演示// 输出: name: main//…

Concurrency Runtime in Visual C++ 2010

PDC 2010 Hejlsberg的演讲中我们看到了VB.NET、C#新的简化异步编程的方式&#xff08;可以下载新的Async CTP体验&#xff09;。之前的TPL&#xff08;Task Parallel Library&#xff09;简化了并行编程。工业语言的飞速发展大大改进、简化了开发人员的编程方式。不仅是微软平台…

关于安卓你不知道的6件事

安卓第一次亮相是出如今2008年公布的HTC Dream手机上&#xff0c;到如今为止它已经6岁了。或许没有人想过在2010年底它就成为了智能手机平台率先的操作系统。这当然要感谢谷歌的努力和强大的財力支持。尽管眼下安卓系统是世界上最流行的移动操作系统&#xff0c;可是关于它的非…

vmware的三种网络模式讲解

vmware有三种网络设置模式&#xff0c;分别是Bridged(桥接),NAT(网络地址转换)&#xff0c;Host-only(私有网络共享主机) 1.Bridged(桥接) 桥接模式默认使用的是&#xff1a;VMnet0 什么是桥接模式&#xff1f;桥接模式就是把主机网卡和虚拟机虚拟的网卡利用虚拟网桥进行通信。…

当前路径_[JSP] 07 JSP 路径问题

首先先明确一下下列URL的假设一个URL是这样的losthost:8080/myservlet/path服务器根路径:losthost:8080/项目根路径:losthost:8080/myservlet/明确了服务器根路径和项目根路径之后,我们就可以开始学习后面的知识了servlet路径问题请求转发和重定向的相对路径写法总结:Servlet重…

CPU时间戳获取

inline long long timt(){long long p; int&a*(((int*)&p)1);__asm__ __volatile__("rdtsc":"a"(p),"d"(a));return p; } 因为在64位CPU上rdtsc出来的结果仍然是在%eax和%edx,而%rax却不是由%eax和%edx拼起来的(反正我试了它没用...也许…

NYOJ 366 D的小L

地址&#xff1a;http://acm.nyist.net/JudgeOnline/problem.php?pid366 方法&#xff1b;用next_permutation&#xff08;pɝmjʊteʃə&#xff09;来求解&#xff0c;递归调用代码 1 #include<stdio.h>2 #include<algorithm>3 using namespace std;4 int main(…

MySQL 语句整理 2019-5-3

MySQL 语句整理 在整理完Oracle的一些常见用语句后,由于MySQL的语法跟Oracle略有不同,随跟PN的MySQL视频进行了间接整理. 查询薪水大于1800, 并且部门编号为20或30的员工sql select deptno,ename,sal from emp where sal > 1800 and (deptno 20 or deptno 30); and 优先级…

联想e580没有声音_现在你可以购买通过 Linux 认证的联想 ThinkPad 和 ThinkStation

曾经有一段时间&#xff0c;ThinkPad 是 Linux 用户的首选系统。但那是在 ThinkPad 还是 IBM 的产品的时候。来源&#xff1a;https://linux.cn/article-12283-1.html作者&#xff1a;Abhishek Prakash译者&#xff1a;Xingyu.Wang曾经有一段时间&#xff0c; ThinkPad 是 Linu…

linux平台下防火墙iptables原理(转)

原文地址&#xff1a;http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646466.html iptables简介 netfilter/iptables&#xff08;简称为iptables&#xff09;组成Linux平台下的包过滤防火墙&#xff0c;与大多数的Linux软件一样&#xff0c;这个包过滤防火墙是免费的&a…

SQL语法大全

SQL语句大全 --语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREATE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表…

Node.js的url模块简介

什么是URL URL是Uniform Location Resource的缩写&#xff0c;翻译为“统一资源定位符”&#xff0c;也就是描述资源位置的固定表示方法。被URL描述的资源可以位于互联网上&#xff0c;也可以位于本地。 URL的组成结构 基本URL包含模式&#xff08;或者成为协议&#xff09;&am…

python游戏结束显示分数代码_当游戏循环在Python中运行时,多线程来显示游戏分数?...

我想根据比赛时间的推移得分。为此&#xff0c;我想让两个循环同时运行。游戏循环和得分循环&#xff0c;每1.5秒加1。当我运行程序时&#xff0c;分数不会出现。我是否正确使用多线程&#xff1f;这是最好的办法吗&#xff1f;为了简单起见&#xff0c;我只发布了相关代码。谢…