iOS http网络请求相关知识总结

KMM 入门(七)处理 HTTP 网络请求 众所周知,一条HTTP请求报文,包含几个重要部分Method、Host、Path及Query、HTTP版本、Headers、Body(主要是POST、PUT)这些内容,Ktor也都支持定义,封装在当中,并在HttpClient的初始化闭包中的子闭包,以及HttpClient的各个扩展方法中,作为最后一个参数的Block参数返回,即可在HttpClient.request或get、post等扩展方法调用的后的闭包中操作HttpClient初始化时,添加闭包,并利用其。... 阅读详情
iOS  http网络请求相关知识总结
    网络请求上遇到比较大的问题是multipart/form-data的多表单post上传格式。
     iOS 的网络请求解决方案主要有四种,NSURLConnect、NSURLSession、 AFNetWorking、MKNetWorkKit四种。
     NSURLConnect是一个比较老的网络请求api,可以兼容iOS2.0之后的系统,但请求方式比较灵活,能具备同步与异步请求。
     NSURLSession是基于NSURLConnect基础上,开发的网络请求api,能兼容iOS7.0之后的系统。性能上有了较大的优化,特别是后台传输方面的使用更加便捷。
     AFNetWorking是非常轻便的网络请求第三方库,其于NSURLConnect、NSURLSession的基础上再封装一层,使调用网络请求更简单,特别是上传文件的表单上的封装。
     MKNetWorkKit也是轻便的网络请求第三方库,其效果与AFNetWorking类似,也比较好用,但与AFNetWorking相比,MKNetWorkKit是单独维护的,从版本升级的角度上考虑,AFNetWorking更加适合应用于长久发展的项目中。
     本项目主要采取AFNetWorking为主要的网络解决方案,但部分网络请求依然直接采用NSURLConnect或NSURLSession的方式实现,代码风格的统一工作未完成。
     
Http请求头
      当打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头的内容生成当次请求的内容发送给浏览器。

http请求头的简单例子:
      Accept-Language: zh-cn,zh;q=0.5
     Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
     Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
     Accept-Encoding: gzip, deflate
     User-Agent: Mozilla/5.0 (compatible; 域名)
     Host: 域名
     Connection: Keep-Alive

http请求头的参数
     (1)Accept-Language: zh-cn,zh;q=0.5
  意思:浏览器支持的语言分别是中文和简体中文,优先支持简体中文。
  详解:
  Accept-Language表示浏览器所支持的语言类型;     
  zh-cn表示简体中文;zh 表示中文;
  q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容,若没有指定 q 值,则默认为1,若被赋值为0,则用于提醒服务器哪些是浏览器不接受的内容类型。
 

  (2)Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7

  意思:浏览器支持的字符编码分别是 GB2312、utf-8 和任意字符,优先顺序是 GB2312、utf-8、*。

  详解:
     Accept-Charset告诉 Web 服务器,浏览器可以接受哪些字符编码;

  GB2312是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312 编码通行于中国大陆;新加坡等地也采
      用此编码。

  utf-8是 Unicode 的一种变长字符编码又称万国码,由 Ken Thompson 于1992年创建,现在已经标准化为 RFC 3629。

  *表示任意字符编码,虽然 q 都是等于 0.7,但明确指定的 GB2312,utf-8 比 * 具有更高的优先级。


  (3)Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  意思:浏览器支持的 MIME 类型分别是 text/html、application/xhtml+xml、application/xml 和 */*,优先顺序是它们从左到右的排列顺序。
  详解:
  Accept表示浏览器支持的 MIME 类型;

  MIME的英文全称是 Multipurpose Internet Mail Extensions(多功能 Internet 邮件扩充服务),它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。

  text/html,application/xhtml+xml,application/xml 都是 MIME 类型,也可以称为媒体类型和内容类型,斜杠前面的是 type(类型),斜杠后面的是 subtype(子类型);type 指定大的范围,subtype 是 type 中范围更明确的类型,即大类中的小类。

  Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;

  text/html表示 html 文档;

  Application:用于传输应用程序数据或者二进制数据;(本项目中主要使用的MIME类型)

  application/xhtml+xml表示 xhtml 文档;

  application/xml表示 xml 文档。



  (4)Accept-Encoding: gzip, deflate
  意思:浏览器支持的压缩编码是 gzip 和 deflate。
  详解:
  Accept-Encoding表示浏览器有能力解码的编码类型;
  gzip是 GNU zip 的缩写,它是一个 GNU 自由软件的文件压缩程序,也经常用来表示 gzip 这种文件格式。
  deflate是同时使用了 LZ77 算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。


  (5)User-Agent: Mozilla/5.0 (compatible;域名)
  意思:使用的用户代理是 Mozilla/5.0 (compatible; 域名)。

  详解:
  User-Agent(用户代理),简称 UA,它是一个特殊字符串头,使得服务器能够识别客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
  Mozilla/5.0:Mozilla 是浏览器名,版本是 5.0;
  compatible(兼容的)表示平台是兼容模式;
                  这个参数的设置对于本项目来说比较重要,若user-agnet设置为nil时。就会按照默认的数据推送给请求端,而对于本项目,移动端若没有设置这个参数,则会收到html5页面。

  (6)Host: 域名
  Host表示请求的服务器网址;

  (7)Connection: Keep-Alive
  Connection表示客户端与服务连接类型;
  Keep-Alive表示持久连接;

      (8) content-type
                  原则上浏览器会根据Content-Type来决定如何显示返回的消息体内容。content-type这个参数的数据类型依然是MIMEType。

content -type有下面的形式:
Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
Application:用于传输应用程序数据或者二进制数据;
Message:用于包装一个E-mail消息;
Image:用于传输静态图片数据;
Audio:用于传输音频或者音声数据;
Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。
subtype用于指定type的详细形式。content-type/subtype配对的集合和与此相关的参数,将随着时间而增长。

但对于本项目,返回的数据的显示或者应用,所以更多的是开发者的手动处理。


iOS中http body表单的拼接
      由于项目需要上传时同时传输关键参数username、password,以及二进制文件数据,因此需要同时传输多个表单,因此content-type的类型为:multipart/form-data,而对于多表单的实现,iOS中规定必须手动拼接实现,而且拼接出来的表单只要稍微有一点点错误,例如多了一个空格、或者换行数多了一个,都无法上传数据。
     
表单上传的基本格式:
    
--Boundary+72D4CD655314C423                                                                      //分割符号,其中“ —Boundary+”这部分是固定的,而剩余的那串数字无特定要求只要非中文,通过随机数函数生成即可。
Content-Disposition: form-data; name="uploadFile"; filename="001.png”         //name参数的类容必须要与服务区一致,否则服务器无法获取文件
Content-Type:image/png                                                                                    //mimetype
Content-Transfer-Encoding: binary                                                                     //数据编码方式
                                                                                                                             //这里必须有一行为空
... contents of boris.png …                                                                                  //文件的二进制数据
--Boundary+72D4CD655314C423—                                                                  //分割符号,其中若分割符号后带--表示这是混合表单的结束句

参数与图片的多表单实例:
--Boundary+72D4CD655314C423                                                                                //表单一
Content-Disposition: form-data; name="username"
     
test001
--Boundary+72D4CD655314C423                                                                                //表单二
Content-Disposition: form-data; name=“password"
     
123
--Boundary+72D4CD655314C423                                                                                  //表单三
Content-Disposition: form-data; name="uploadFile"; filename=“luozhiwei.png" 
Content-Type:image/png 
Content-Transfer-Encoding: binary

... contents of boris.png ... 
--Boundary+72D4CD655314C423—                                                                             //结束符号
ios发送post请求(包括txt和image)的完整例子 代码里实现了发送post请求给服务器,包括发送text文件和image 立即下载

相关推荐

Day01 Geant4学习

​ 用来记录粒子在每个step中的信息的,例如位置,能量,动量.例如,假设每一个粒子都有一个属于自己的id,会记录自己的轨迹状态信息就是track,当他发生反应时,就会产生新的id。​ 最终在新建的build文件夹中的vis.mac文件中设置,是自带的,如果有更高的需求可以自己去更改,但是一般都是写好的,设置好了图形界面的一些东西,呈现的自己建模的图形界面多大,需不需要网格什么的。从反应到结束的过程,其中也包括它产生的刺激粒子的反应到结束的过程,成为一个事件event。

LXS_357的博客 933

header(‘Content-Type: text/event-stream‘);是干什么的?底层原理是什么?

需要注意的是,SSE是一种单向通信协议,只允许服务器向客户端推送数据,而不支持客户端向服务器发送请求。因此,SSE适用于需要服务器主动向客户端推送实时数据的场景,如实时通知、实时数据更新等。响应头告诉浏览器使用SSE的协议来解析响应,并按照SSE规范处理收到的事件数据。浏览器会将每个事件分解为适当的事件对象,从而能够对其进行处理和展示。响应头的HTTP响应时,它会将响应解析为SSE流。,这是用于Server-Sent Events(SSE)的规定内容类型。是用于设置HTTP响应头的一行代码。

长风破浪会有时的博客 7443

瑞芯微RK809音频驱动

瑞芯微RV1126中的RK809音频驱动开发

m0_61899715的博客 5221

[iOS开发]网络请求中的请求头

设置网络请求的请求头 获取网络请求返回的请求头中的内容

weixin_52192405的博客 2577

手把手教你用键盘在Ubuntu上给Lerobot机械臂采集HIL-SERL训练数据(附完整配置文件)

本文详细介绍了在Ubuntu系统中使用键盘控制Lerobot机械臂进行HIL-SERL训练数据采集的完整流程。从环境准备、机械臂校准到键盘遥操系统配置和数据采集优化,提供了实战指南和常见问题解决方案,帮助读者高效获取高质量训练数据,推动具身智能和强化学习应用的发展。

weixin_30733003的博客 479

Zynq UltraScale+网络加速方案:用AXI Ethernet Subsystem实现2.5G吞吐量的配置秘籍

本文详细介绍了在Xilinx Zynq UltraScale+平台上使用AXI Ethernet Subsystem实现2.5Gbps网络吞吐量的配置方法。通过硬件设计优化、Vivado工程配置、Linux驱动调优及性能测试等关键步骤,为工业视觉和5G前传等高速网络应用提供可靠解决方案。

weixin_30485379的博客 614

浅析web端的消息推送原理

转载本文需注明出处:微信公众号EAWorld,违者必究。引言:在互联网高速发展的时代里,web应用大有取代桌面应用的趋势,不必再去繁琐的安装各种软件,只需一款主流浏览器即...

低代码开发,数据,中间件,企业架构原创技术分享 1197

记二开金蝶云星空动态表单艰辛历程

整个过程,开发接近一周,期间也有做其他事,遇到不会的第一时间也是找金蝶社区,搜索有无相关的解决问题经历。再就是问同事,最终还不能解决就提工单给供应商。响应一般都要大半天(我们公司是有vip,相对大半天能够响应是算好了),虽然有时候有响应,但是会转到其他研发老师,期间可能会是几天!如果是经常开发云星空的二开功能,熟练了速度回很快,但是对于接触不多的,或者刚入门的,会是个漫长的折磨过程。1、重新生产模块的dll.2、退出客户端3、重启iis4、等待五六分钟5、附加到进程6、登录客户端进去操作。

修炼中 3938

iOS Http请求获取响应头文件 与添加头文件

一直都是在给服务器端发送请求的时候可能会出现设置头文件的情况,但这次获取HTTP 返回的头文件,着实让我纠结一番,但最终还是实现了,总结一下。(PS:其实最后方法很简单,只是分享一下纠结过程) 先看一下使用 AFNetworking3.0是如何获取数据的。 AFHTTPSessionManager *httpsManager = [AFHTTPSessionManager manager];

张梦磊 1万+

从零开始:ENSP与VirtualBox的兼容性迷宫与突围指南

本文深入解析eNSP与VirtualBox的兼容性问题,特别是报错40的解决方案。从诊断根源、彻底卸载残留到推荐黄金版本组合,提供了一套完整的实战指南,帮助网络工程师和技术学习者快速解决AR_Base等设备的启动故障,优化虚拟化环境性能。

weixin_29284885的博客 476

哨兵1号回波数据(L0级)FDBAQ压缩算法详解

本文介绍哨兵1号用的FDBAQ算法,它实现非整数可变bit压缩,大部分数据仅需 3bit输出,少数高反射率数据需4bit输出,使得平均输出比特率刚超过3bit,比熵约束分块自适应量化 (ECBAQ)压缩算法所需的3.7bit更低。也就是说FDBAQ压缩完,除了要记录分块尺寸和各块的均值码(对应哨兵1号数据包里的THIDX)外,还需要记录霍夫曼码字的长度(对应哨兵1号数据包里的BRC)。唯一不同的就是量化后的编码规则使用了霍夫曼编码,相当于在传统的BAQ压缩流程的后面又加了一个步骤。

2302

iOS 使用http POST方法传输二进制数据

NSURL *url = [NSURL URLWithString:HEADIMAGE]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url]; [request setHTTPMethod:@"POST"]; //设置Content-Type的格式为二进制数据 NS

pp204204的专栏 4074

如何对TBSS的结果进行统计学的分析,已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析??

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1439

字节iOS面试经验分享:HTTP与网络编程

字节iOS面试经验分享:HTTP与网络编程

LucianaiB的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

iOS - NetRequest 网络数据请求

&#13; 1、网络请求 1.1 网络通讯三要素 1、IP 地址(主机名): 网络中设备的唯一标示。不易记忆,可以用主机名(域名)。 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2^8^4 = 2^32 = 42 亿。 2) 本地回环地址: 每台机器都有自己的本地回环地址,ip 为 127.0.0.1 ,主机名为 localhost。...

rstbfveradsvc 322

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

iOS面试题 网络请求(一)

iOS面试题 网络请求(一)  一、URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远

qq_32807559的博客 521

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS面试备战-网络篇

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130595548,不管你是大牛还是小白都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!) 计算机网络是计算机科学与技术专业的必修课,也是移动端,前端,后端都会涉及并用到的知识点,可想而知它的重要性。所以它也成为了iOS面试中经常被问及的问题。准备面试的话,网络相关的知识点一定不能错过。这里总结了一些我认为有用的和最近面试遇到的网络相关知识点。..

iOS-大鑫 259

插件相关(cocos2d)

1.xcode打包库(iOS and  Android平台): iOS相关:http://www.cnblogs.com/bboymars/p/4980754.html           http://www.360doc.com/content/15/0910/23/26281448_498349415.shtml (1).a   http://www.jianshu.com/p/e2

rioalian的博客 385

【iOS】iOS中简单的网络请求

在完成暑假最后一个项目——仿写苹果原生APP天气预报时,需要进行网络请求,且网络请求在iOS开发中是比较重要的知识点,特学习并记录。

2301_80467753的博客 2388

iOS相关的http网络请求再次封装

一般情况下用的较多的是GET、POST请求方式,先封装一个HttpManager类 .m相关的代码 #import "HttpManager.h" NSString * const HttpTokenExpiredNotification = @"HttpTokenExpiredNotification"; @implementation HttpManager + (...

weixin_38496080的博客 893

iOS网络相关知识点

iOS网络相关知识点 UI事件传递和响应 UIView提供内容,负责处理触摸事件 CALayer负责显示内容contents 事件传递 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event // 实现...

WJ的博客 306

iOS网络请求原理一文看懂

总而言之,iOS的网络请求是一个从高层API到底层协议栈协同工作的过程。我们通过URLSession创建任务,系统则负责DNS解析、TCP/IP连接、TLS加密、发送HTTP数据、接收响应等一系列复杂操作,最后通过回调将结果返回给我们的App。理解这个过程有助于我们更好地进行网络调试和性能优化。是URLSession类提供的一个单例(Singleton)实例。它是一个全局唯一的、预配置好的Session对象,开箱即用,无需你自己进行任何配置。特性共享Session (创建方式直接访问单例,无需配置配置。

baidu_30087715的博客 1276

[iOS]-网络请求总结

iOS-网络请求总结

m0_52192682的博客 1473

[iOS]没话找话-总结一下最近遇到的网络请求到底怎么写

[iOS]没话找话-总结一下最近遇到的网络请求到底怎么写

m0_74703932的博客 971

iOS 26 Network API 变动:网络请求权限与协议支持变化

iOS网络API的变动(从iOS 14到最新版本)主要围绕隐私强化和协议现代化。优先适配权限管理:在Info.plist中声明所有网络相关权限,并在代码中动态请求授权。升级协议支持:确保服务器支持HTTP/3和TLS 1.3,以利用性能优势。测试兼容性:使用Xcode的Network调试工具测试不同iOS版本的行为。参考官方文档:苹果开发者网站(developer.apple.com)提供详细指南,如URLSession文档。这些变化虽增加开发复杂度,但能提升应用安全性和用户体验。

2501_94068366的博客 2485

[iOS开发]网络请求合集

文章目录前言最原始的网络下载 -- NSData + NSURL方式NSURLConnection 和 NSURLSessionGET请求 前言 最近计算机网络该学习网络层的内容,想着自己把iOS中网络请求的部分好好复习一下 以及看面经时的断点续传自己一直不知道怎么实现,所以统一来了解一下 iOS开发中的网络下载方式包括NSData(最原始,实际开发基本不会用),NSURLConnection(古老又过气的苹果原生网络框架),NSURLSession(现在流行的苹果网络框架),AFNetworking,SD

复杂化的博客 1594
上一篇: mac 终端 常用命令
下一篇: 加密算法学习以及base64加密解密应用
luozhiwei_iOS
博客等级 码龄12年 4粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值