GET--POST的同步/异步请求

2023-11-02

同步请求的过程不能进行其他操作,而异步请求相当于开了一个支路,可以进行其他操作,但是请求的结果得返回到主线程

GET同步请求

NSString *strURL = @"http://api.map.baidu.com/place/v2/search?query=银行&region=大连&output=json&ak=6E823f587c95f0148c19993539b99295";
//一个正常的URL地址是不允许有中文的,只能有数字,26个英文字母的大小写,和一些特殊的符号,比如说&,%等,如果遇到带中文的URL,首先进行编码:
NSString *strEncode = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//接下来,URL符合要求之后,就开始进行网络请求,全网络请求分三步;
//1.根据已经编译好的URL,创建一个NSURL;
NSURL *url = [NSURL URLEithString:strEncode];
//2.发送网路请求
NSMutableURLRequest *request = [NSMutableRequest requestWithURL:url];
//3.返回一个我们要的数据,是一个NSData对象
//第一个参数:发送的请求
//第二个参数:返回的响应NSJSONReadingMutableContainers或者是0
//第三个参数:错误信息 nil
NSData *data = [NSURLConnection sendSynchronousRequest: request returningResponse:0 error:nil];
//对返回回来的数据,data进行json解析
NSMutableDictionary *dic = [NSJSONSerialization JSINObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

POST请求
前两步和GET是一样的

    NSString * synPOST = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
    NSURL *url = [NSURL URLWithString:synPOST];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //接下来是POST独有的请求部分
    //把请求的方式先设置为POST请求,默认是GET;
    [request setHTTPMethod:@"POST"];
    //接下来需要把请求的内容放到request的body中
    NSString *bodyStr = @"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";
    //需要把请求的部分变成NSData类型的对象
    NSData *bodyData = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
    //把bodyData放到request
    [request setHTTPBody:bodyData];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    //json 解析
    NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

异步请求
Get同步和异步请求在步骤上完全相同,只是在第三步使用的是sendSyn的方法,异步请求用的是代理的方法.,异步是基于同步进行操作 得签定NSURLConnectionDataDelegate协议


    NSString *strURL = @"http://img4.duitang.com/uploads/item/201207/28/20120728105310_jvAjW.thumb.600_0.jpeg";

    NSURL *url = [NSURL URLWithString:strURL];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //前两步和之前还是一模一样,第三步出现变化,通过代理的方式进行异步操作;
    [NSURLConnection connectionWithRequest:request delegate:self];
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    //只要接受到服务器放回的响应信息,就会走这个方法,我们在这个方法里需要对接受数据的容器data进行初始化的设置
    self.data = [NSMutableData data];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    //只要返回数据就会走这个协议方法
    //append 是累加的意思
    [self.data appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //到这,整个请求已经结束,需要把返回的data对imageView的image进行赋值
    self.imageView.image = [UIImage imageWithData:self.data];
}

POST异步
通过其内的block进行数据解析

 NSString * strURL = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
    NSURL *url = [NSURL URLWithString:strURL];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //1.request 的请求方式
    [request setHTTPMethod:@"POST"];
    NSString *strBody = @"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";
    NSData *bodyData = [strBody dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:bodyData];
    //网络请求在子线程里进行请求,请求下来的数据需要通过空间作为载体显示出来,需要把数据在主线程里显示.第二个参数就是指定把数据返回到那个线程
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] compltionHandler:^(NSURLResponse *response,NSData *data,NSError *connectionError){
//参数的data就是我们请求下来的数据,接下来数据分析就得在block中进行操作
//进行json解析
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectData:data options:0 error:nil];
}];

GET异步通过block的方式

    NSString *str = @"http://img4.duitang.com/uploads/item/201207/28/20120728105310_jvAjW.thumb.600_0.jpeg";
    //1.创建一个URL
    NSURL *url = [NSURL URLWithString:str];
    //2.发送一个请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //3.block
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSdata *data , NSError *connectionError){
//数据依旧在block中处理
self.imageView.image = [UIImage imageWithData:data];
}];

总结:网路请求的步骤:
1.根据网址的字符串创建一个NSURL对象,
2.根据这个URL对象,创建一个NSURLRequest的请求
3.发送请求,然后获取请求的对象,同步和异步的区别就是在请求的方法的选用有差别,其他都一样
POST就是比GET多了一个body的属性 需要通过 [request setHTTPMethod:@”POST”]和 [ request setHTTPBody:bodyData ]两个方法添加一个body;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GET--POST的同步/异步请求 的相关文章

  • 从 NSArray 为 UITableView 创建索引

    我读过创建索引 uitableview 旁边的 a z 的最佳方法是设置一个 nsdictionaries 数组 其中每个字典对应一个部分 并且 rowValue 键包含一个行数组 NSDictionary headerTitle gt A
  • 应用内购买导致偶尔崩溃

    我在互联网上搜索了这方面的帮助 但没有结果 我的应用程序已在应用程序商店中上线 少数用户报告应用程序在进行应用内购买后冻结并崩溃 我的游戏中唯一的 IAP 它基本上解锁了完整版本 即使他们重新启动设备并尝试继续 设备也会再次崩溃 我无法重现
  • IOS - 委托与通知

    想听听您对以下架构的看法 在我的应用程序中 我有一个处理异步登录的静态类 LoginManager 登录阶段完成后 应用程序应该做出响应并转换到另一个状态 我有2条实施建议 使用委托 import Foundation protocol L
  • UIAlertController 的弹出框变形

    我使用 UIToolbar 中的 UIAlertController 和首选操作表样式向用户呈现选项列表 呈现时 弹出框的箭头被切断 其角以两种不同的半径圆化 据我所知 我用来展示它的代码直接来自文档 UIAlertController a
  • apple-app-site-association 从 azure 请求返回为 application/JSON

    我有以下要求 当在 Azure 网站中请求文件的 URL 时 根文件夹中的可用文件必须返回到 application JSON 举例来说 我有一个名为 apple app site association 的文件 它是一个文本文件 在 az
  • iOS-如何使用 AVAsset 或 AVURLAsset 获取 .mp4 文件的持续时间

    我知道视频类型问题的持续时间之前已得到解答 但我在获取视频持续时间方面遇到了真正的麻烦 mp4文件通过使用AVAsset and by AVURLAsset 我正在使用以下代码 NSString itemPathString NSSearc
  • 为什么一个崩溃日志具有象征意义,而不是另一个?

    我在 XCode Organizer 中有两个来自 iPhone 应用程序的崩溃日志 两者相隔 20 分钟内发生 在同一台设备上运行相同版本的应用程序 其中一个已被象征化 而另一个则没有 无符号日志具有类型和代码 Exception Typ
  • UIWebView Javascript 窗口到窗口通信

    我正在开发一个 iOS 应用程序 我试图在其中使用UIWebView显示各种网站 最近我完成了将 Javascript 注入到的逻辑UIWebView捕获实例window open window close and window opene
  • 视图不在窗口层次结构中的 iOS

    当我从 PassCode 控制器移动到 OTP ViewController 时 我在控制台中收到以下错误 警告 尝试在 PassCodeController 0x1ec3e000 gt 其视图不在窗口层次结构中 这是我用来在视图之间更改的
  • 正常运行时间 iOS Objective-C - 毫秒精度

    我正在努力争取 iOS 的正常运行时间 我正在使用 mach absolute time 但我发现它在睡眠期间暂停 我找到了这个片段 time t uptime struct timeval boottime int mib 2 CTL K
  • 如何分发我的应用程序的多个版本?

    我想分发我的应用程序的两个版本 稳定分支以及当前的开发主干 使用试飞 http testflightapp com 而且 如果可能的话 我只想邀请测试人员一次 我可以在一个 TestFlight 团队中拥有一个应用程序的两个版本吗 或者也许
  • Gmail 应用程序中指向特定邮件的深层链接

    我成功地从 gmail api 获得了消息网址 https mail google com mail email protected cdn cgi l email protection all 155134b5e66a9b06 然而 当我
  • 在 iOS 中对 Google 地图标记进行聚类

    我有一个基于地图的应用程序 使用 Google 地图的 iOS SDK 我需要在核心数据数据库中存储多达数千个项目 并在地图上用标记显示它们 出于性能和可用性的原因 我需要在用户缩小时对这些标记进行聚类 但我需要确保放置代表性标记 以便用户
  • 如何设置 NSUserDefault Key 的初始值?

    我想为 NSUserDefault 键设置一些初始值 以便应用程序的第一次运行具有一些合理的初始设置 我以为我在应用程序包 plist 中遇到了一种简单的方法来执行此操作 但现在我找不到它 有任何想法吗 您应该使用registerDefau
  • iOS - 确保在主线程上执行[重复]

    这个问题在这里已经有答案了 我想知道如何打电话给我function on the 主线程 我如何确保我的function被称为主线程 这是继之前的question https stackoverflow com questions 1105
  • 无法转换“String!”类型的值预期参数类型错误

    我有一个公共职能 public func lastActivityFor userName String gt String 后来我想将其称为 OneLastActivity lastActivityFor username 但最后一行出现
  • 如何捕获 UITableView / UIScrollView 完整内容的 UIImage 并使其在 ios 设备上工作

    我正在使用这段非常优雅的代码获取 UIScrollView 的屏幕截图 包括屏幕外部分 https stackoverflow com questions 3539717 getting a screenshot of a uiscroll
  • iOS 11.x 系统颜色

    我读过很多关于如何自定义视图颜色的文章 但没有任何关于检索标准控件 如 iOS 11 x 或以前版本中的导航栏 状态栏和选项卡栏 的系统颜色的文章 UIColor 类有 3 种系统颜色 但它们几乎没有用 例如 调用 UINavigation
  • 使用 Objective-C 将 XMP 数据嵌入到 PNG

    我需要将自定义 XMP 文件嵌入到 iOS 应用程序中的 PNG 中 到目前为止 我能做的就是编译 Adob e XMP 工具包 生成 Xcode 项目 然后正确编译该项目 从那里我不知道如何在我的 Xcode 项目中使用该库以及如何使用它
  • Xcode 8 - 删除了一些按钮边框

    我刚刚将 Xcode 版本从 7 3 更新到 8 0 一些按钮边框消失了 代码看起来很好 所以我真的不知道各层发生了什么 顺便说一句 在其他一些控制器中我可以看到图层边框 self button layer borderColor bord

随机推荐

  • webpack 学习(一)前端常用的模块化设计模式之AMD

    AMD 异步模块定义 是为浏览器环境设计的 因为 CommonJS 模块系统是同步加载的 当前浏览器环境还没有准备好同步加载模块的条件 AMD 定义了一套 JavaScript 模块依赖异步加载标准 来解决同步加载的问题 模块通过 defi
  • 【第十一届泰迪杯数据挖掘挑战赛】A 题:新冠疫情防控数据的分析 思路+代码(持续更新)

    第十一届泰迪杯数据挖掘挑战赛 A 题 新冠疫情防控数据的分析 思路 代码 持续更新 问题背景 解决问题 代码下载 数据分析 Task1 Task2 Task3 Task4 问题背景 自 2019 年底至今 全国各地陆续出现不同程度的新冠病毒
  • 控制反转及Bean装配的几种方式

    控制反转及Bean装配的几种方式 Spring两大基础核心 一是控制反转 二是依赖注入 控制反转和依赖注入 控制反转 通俗来讲 就是将bean的创建和销毁交由另一个东西全权管理 这个东西叫做Spring容器 一般来说 在Spring应用中
  • 华为服务器提示错误信息,服务器错误日志

    服务器错误日志 内容精选 换一换 为加强对数据的容灾管理 云堡垒机支持手动备份和配置日志远程备份 提高审计数据安全性和系统可扩展性 通过手动导出 下载各功能模块数据文件保存在本地 可手动备份日志请参见表1 系统内导出的csv文件 用Exce
  • element el-date-picker选择时间范围限制

    element el date picker选择时间范围限制
  • 生物识别技术在场景应用中发挥重大作用

    相较于条码支付 刷脸支付的硬件成本还是比较高 而且占空间 因此 其应用场景没有条码支付丰富 微信扫脸支付 在商超 餐饮以及便利店等场景中 收银空间是有限的 布放哪怕像PAD大小的刷脸支付设备都会觉得局促 如果同时布放两个哪怕像PAD大小的设
  • Odoo 进销存报表现已开源

    根据会计区间或自定义查询时间段 对仓库的产品出入库情况进行查看 模块地址参见内部群公告
  • 谷粒商城微服务分布式高级篇ElasticSearch四——Java使用ElasticSearch

    文章目录 ElasticSearch Rest Client Java使用ElasticSearch 存储数据到ES 从ES检索数据 项目使用ES ElasticSearch Rest Client Java使用ElasticSearch
  • 迷你世界箱子里物品无限取

    废话少说代码如下 在高度为8的箱子可以无限补给 function f e WorldContainer addItemToContainer e x e y e z e itemid e itemnum end 关闭盒子 函数 f 下面是添
  • TypeScript项目配置

    前言 我们需要建立tsconfig json 作用 用于标识 TypeScript 项目的根路径 用于配置 TypeScript 编译器 用于指定编译的文件 重要字段 files 设置要编译的文件的名称 include 设置需要进行编译的文
  • offsetTop、offsetParent、scrollTop以及vue如何实现左右联动效果

    offsetTop 元素到offsetParent顶部的距离 offsetParent 距离元素最近的一个具有定位的祖宗元素 relative absolute fixed 若祖宗都不符合条件 offsetParent为body 如下图所示
  • OrangePi 4b Lts GPIO最高输出频率测试

    根据示波器显示的值 在写入高低电平各有一个usleep 1 时可以输出稳定10kHz的方波 但是10k每段有50us 不知道usleep 1 为什么会变成50us 可能是digitalWrite稳定时间比较长 直接死循环里digitalWr
  • 学生管理系统主要界面

    目录 1 登录界面 login 2 信息管理界面 main 3 页面展示 本篇文章主要介绍学生管理系统主要界面 至于各界面中所含代码均基于Servlet 创建 使用 生命周期 http协议 http请求 http响应 过滤器 Ajax 异步
  • gtest编译和使用

    最近想总结一下gtest的使用 方便后面查阅 1 编译安装googletest 2 编写测试用例 3 编译测试和调试代码 1 编译安装googletest github上下载googletest release 1 10 0 这里需要注意该
  • 关于STM32按键实验中连接按键的GPIO管脚是配置为上拉输入还是下拉输入的理解

    关于STM32按键实验中连接按键的GPIO管脚是配置为上拉输入还是下拉输入的理解 以正点原子按键输入实验为例 1 按键KEY0 lt gt PE4 按键另一端接GND 2 按键KEY1 lt gt PE3 按键另一端接GND 3 按键WK
  • 【力扣】最接近的三数之和

    给你一个长度为 n 的整数数组 nums 和 一个目标值 target 请你从 nums 中选出三个整数 使它们的和与 target 最接近 返回这三个数的和 假定每组输入只存在恰好一个解 示例 1 输入 nums 1 2 1 4 targ
  • 生命的进程

    比我们活着时间长的人自然能呼吸到更多的空气 也必将有我们所不了解的生活阅历和技能 尊重他人 就是成就自己
  • VulnHub-Sick0s1.2

    目录 简介 信息收集 漏洞发现 漏洞利用 权限提升 总结 简介 该靶机是Sick0s系列的第二个靶机 总体来说不难 提权那里需要花点时间 毕竟linpeas脚本没有将计划任务标红 总之我个人尝试了很久内核提权 浪费了大量时间 而且不知道是w
  • C++函数参数的默认值

    一 函数参数的默认值 1 函数参数的默认值就是说在声明函数或者定义函数的时候直接在参数后给赋值 这样在函数调用的时候调用方可以不用再给传值 它会默认使用它的默认值 错误实例 在给函数参数赋默认值的时候要注意以下几点 1 参数默认值必须从右向
  • GET--POST的同步/异步请求

    同步请求的过程不能进行其他操作 而异步请求相当于开了一个支路 可以进行其他操作 但是请求的结果得返回到主线程 GET同步请求 NSString strURL http api map baidu com place v2 search qu