iOS网络请求之multipart/form-data提交数据
multipart/form-data表单数据
在http网络请求中,post没有请求长度的限制,因为post把数据放在了body中,而不是像Get一样放在了浏览器的地址栏中(可以这么理解),
所以相对安全。
POST有两种方式
第一种直接把数据放在body中,用contentType来区分类型是text还是json或者是别的什么数据。这个最简单,不做赘述。
第二种是表单的形式,通过boundaries来区分放置的是那些数据,很像一个字典,用K,V放置对象。
参考POST表单数据,这是摘自网上的一段Http请求代码
POST /upload_file/UploadFile HTTP/1.1
Accept: text/plain, */*
Accept-Language: zh-cn
Host: 192.168.29.65:80
Content-Type:multipart/form-data;boundary=---------------------------7d33a816d302b6
User-Agent: Mozilla/4.0 (compatible; OpenOffice.org)
Content-Length: 424
Connection: Keep-Alive -----------------------------7d33a816d302b6
Content-Disposition:form-data;
name="userfile1";
filename="E:\s"Content-Type:
application/octet-stream abbXXXccc
-----------------------------7d33a816d302b6
Content-Disposition: form-data;
name="text1" foo
-----------------------------7d33a816d302b6 <这里分割线多了两个->
Content-Disposition: form-data;
name="password1" bar
-----------------------------7d33a816d302b6-- <这里分割线的前端和末尾多了两个-,表明数据的结束>
大概架构就是这样,下面直接上一个测试代码:
POST_BOUNDS 是我顶一个一个字符串 可以定义你喜欢的任意值
1 -(void)multiPartPost:(NSDictionary *)dicData{ 2 3 4 NSURL *url = [NSURL URLWithString:@"http://192.168.1.112:8080/TestSerlvet/interfaces"]; 5 NSMutableString *bodyContent = [NSMutableString string]; 6 for(NSString *key in dicData.allKeys){ 7 id value = [dicData objectForKey:key]; 8 [bodyContent appendFormat:@"--%@\r\n",POST_BOUNDS]; 9 [bodyContent appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key]; 10 [bodyContent appendFormat:@"%@\r\n",value]; 11 } 12 [bodyContent appendFormat:@"--%@--\r\n",POST_BOUNDS]; 13 NSData *bodyData=[bodyContent dataUsingEncoding:NSUTF8StringEncoding]; 14 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 15 [request addValue:[NSString stringWithFormat:@"multipart/form-data;boundary=%@",POST_BOUNDS] forHTTPHeaderField:@"Content-Type"]; 16 [request addValue: [NSString stringWithFormat:@"%zd",bodyData.length] forHTTPHeaderField:@"Content-Length"]; 17 [request setHTTPMethod:@"POST"]; 18 [request setHTTPBody:bodyData]; 19 NSLog(@"请求的长度%@",[NSString stringWithFormat:@"%zd",bodyData.length]); 20 __autoreleasing NSError *error=nil; 21 __autoreleasing NSURLResponse *response=nil; 22 NSLog(@"输出Bdoy中的内容>>\n%@",[[NSString alloc]initWithData:bodyData encoding:NSUTF8StringEncoding]); 23 NSData *reciveData= [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 24 if(error){ 25 NSLog(@"出现异常%@",error); 26 }else{ 27 NSHTTPURLResponse *httpResponse=(NSHTTPURLResponse *)response; 28 if(httpResponse.statusCode==200){ 29 NSLog(@"服务器成功响应!>>%@",[[NSString alloc]initWithData:reciveData encoding:NSUTF8StringEncoding]); 30 31 }else{ 32 NSLog(@"服务器返回失败>>%@",[[NSString alloc]initWithData:reciveData encoding:NSUTF8StringEncoding]); 33 34 } 35 36 } 37 }
转载于:https://www.cnblogs.com/louzhuhaha/p/3633402.html
iOS网络请求之multipart/form-data提交数据相关推荐
- 吕文翰 php,自己动手写一个 iOS 网络请求库(三)——降低耦合
自己动手写一个 iOS 网络请求库(三)--降低耦合 2015-5-22 / 阅读数:16112 / 分类: iOS & Swift 本文中,我们将一起降低之前代码的耦合度,并使用适配器模式实 ...
- 最简单的iOS网络请求
为什么80%的码农都做不了架构师?>>> 做iOS开发,说到网络请求,大家可能都不约而同的提到AFN,可以说大家的网络请求都是用AFN封装而成,AFN的强大易用的确很好. 但是 ...
- iOS 网络请求劫持
1.概述: NSURLProtocol是URL loading system 中的一个重要的组成部分,它允许我们对全局的网络请求(基于使用URLRequest)做拦截,可拦截的请求类型有NSURLCo ...
- ios开发循环网络请求_GitHub - JadenTeng/ResourceX: iOS网络请求,网络泛型编程,工具类的封装,基于AFNetworking 实现, NSCache数据缓存...
ResourceX 通过AFNetworking.YYModel 解析网络泛型编程简化网络请求 现如今,网络通信几乎涉及每一个app程序.对于绝大多数请求HTTP API的方法,它们的执行流程都可以分 ...
- iOS网络请求安全(JWT,RSA)
在网络世界中,安全是一个很重要的问题,以往的HTTP请求已经不能承担这个安全任务,抓包工具一抓,你的所有网络请求全都曝光.当然,你可能会采用加密算法来加密数据,但是这仍然不够. 在移动端和服务器的通信 ...
- iOS网络请求安全认证(JWT,RSA)
在网络世界中,安全是一个很重要的问题,以往的HTTP请求已经不能承担这个安全任务,抓包工具一抓,你的所有网络请求全都曝光.当然,你可能会采用加密算法来加密数据,但是这仍然不够. 在移动端和服务器的通信 ...
- iOS网络请求认证挑战
一.引言 Http请求中认证挑战相关的代理如下: 1.将要发送一个认证挑战的请求 - connection:willSendRequestForAuthenticationChallenge: 2.是 ...
- iOS网络请求错误nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1004
在发起一个网络请求时,出现错误 nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1004 ...
- dio java,Flutter基础(十一)网络请求(Dio)与JSON数据解析
本文首发于微信公众号「后厂技术官」 前言 在Android开发中如果我们想要请求网络,可以使用HttpClent.HttpURLConnection,但在项目中一般都会使用OkHttp和Retrofi ...
- iOS网络请求指南之《封装银联接口协议》(提交和返回数据都为XML格式)案例:备用无卡通道(收银台的订单退款、查询机制)【对接条码支付综合前置平台被扫支付订单申请退款(退款查询)】
文章目录 引言: I.业务功能 1.1 退款方式 1.2 退款条件判断 1.3 退款限制 II .退款接口的协议规则 2.1 数据格式 2.2 签名算法 2.3 封装银联接口协议 III.请求 3.1 ...
最新文章
- 数据结构与算法:15 树
- C++实现求解最大公约数和最小公倍数
- 基于区块链的健康链系统设计与实现(6)结束语
- JZOJ 100046. 【NOIP2017提高A组模拟7.14】收集卡片
- 软件工程概论 课堂练习【静态结构建模——画出相应的对象模型】
- 深入浅出InfoPath——设计讨论版之文本域篇
- Android的Button按钮,ACTION_UP事件不触发解决方案
- python mysql 2002_python MySQLdb连接mysql失败 2002, Can't connect to loca
- Linux查看占用mem的进程脚本
- [转] 为什么用原型,为什么用闭包
- python有关urllib,urllib2和requests应用记录
- 网易云音乐网站音乐下载
- Failed to resolve: support-core-ui和Failed to resolve: runtime
- android 6.0长截屏,网页长截图app
- Activiti6在Springboot下的使用 6 并行网关的处理
- HTML转PDF浅析
- Android手机设备唯一标识符
- 如何衡量一个算法的好坏
- 百度地图 pc浏览器获取经纬度
- 企业邮箱邮件撤回可撤回几次?邮件误删恢复怎么用?