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提交数据相关推荐

  1. 吕文翰 php,自己动手写一个 iOS 网络请求库(三)——降低耦合

    自己动手写一个 iOS 网络请求库(三)--降低耦合 2015-5-22 / 阅读数:16112 / 分类: iOS & Swift 本文中,我们将一起降低之前代码的耦合度,并使用适配器模式实 ...

  2. 最简单的iOS网络请求

    为什么80%的码农都做不了架构师?>>>    做iOS开发,说到网络请求,大家可能都不约而同的提到AFN,可以说大家的网络请求都是用AFN封装而成,AFN的强大易用的确很好. 但是 ...

  3. iOS 网络请求劫持

    1.概述: NSURLProtocol是URL loading system 中的一个重要的组成部分,它允许我们对全局的网络请求(基于使用URLRequest)做拦截,可拦截的请求类型有NSURLCo ...

  4. ios开发循环网络请求_GitHub - JadenTeng/ResourceX: iOS网络请求,网络泛型编程,工具类的封装,基于AFNetworking 实现, NSCache数据缓存...

    ResourceX 通过AFNetworking.YYModel 解析网络泛型编程简化网络请求 现如今,网络通信几乎涉及每一个app程序.对于绝大多数请求HTTP API的方法,它们的执行流程都可以分 ...

  5. iOS网络请求安全(JWT,RSA)

    在网络世界中,安全是一个很重要的问题,以往的HTTP请求已经不能承担这个安全任务,抓包工具一抓,你的所有网络请求全都曝光.当然,你可能会采用加密算法来加密数据,但是这仍然不够. 在移动端和服务器的通信 ...

  6. iOS网络请求安全认证(JWT,RSA)

    在网络世界中,安全是一个很重要的问题,以往的HTTP请求已经不能承担这个安全任务,抓包工具一抓,你的所有网络请求全都曝光.当然,你可能会采用加密算法来加密数据,但是这仍然不够. 在移动端和服务器的通信 ...

  7. iOS网络请求认证挑战

    一.引言 Http请求中认证挑战相关的代理如下: 1.将要发送一个认证挑战的请求 - connection:willSendRequestForAuthenticationChallenge: 2.是 ...

  8. iOS网络请求错误nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1004

    在发起一个网络请求时,出现错误 nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1004 ...

  9. dio java,Flutter基础(十一)网络请求(Dio)与JSON数据解析

    本文首发于微信公众号「后厂技术官」 前言 在Android开发中如果我们想要请求网络,可以使用HttpClent.HttpURLConnection,但在项目中一般都会使用OkHttp和Retrofi ...

  10. iOS网络请求指南之《封装银联接口协议》(提交和返回数据都为XML格式)案例:备用无卡通道(收银台的订单退款、查询机制)【对接条码支付综合前置平台被扫支付订单申请退款(退款查询)】

    文章目录 引言: I.业务功能 1.1 退款方式 1.2 退款条件判断 1.3 退款限制 II .退款接口的协议规则 2.1 数据格式 2.2 签名算法 2.3 封装银联接口协议 III.请求 3.1 ...

最新文章

  1. 数据结构与算法:15 树
  2. C++实现求解最大公约数和最小公倍数
  3. 基于区块链的健康链系统设计与实现(6)结束语
  4. JZOJ 100046. 【NOIP2017提高A组模拟7.14】收集卡片
  5. 软件工程概论 课堂练习【静态结构建模——画出相应的对象模型】
  6. 深入浅出InfoPath——设计讨论版之文本域篇
  7. Android的Button按钮,ACTION_UP事件不触发解决方案
  8. python mysql 2002_python MySQLdb连接mysql失败 2002, Can't connect to loca
  9. Linux查看占用mem的进程脚本
  10. [转] 为什么用原型,为什么用闭包
  11. python有关urllib,urllib2和requests应用记录
  12. 网易云音乐网站音乐下载
  13. Failed to resolve: support-core-ui和Failed to resolve: runtime
  14. android 6.0长截屏,网页长截图app
  15. Activiti6在Springboot下的使用 6 并行网关的处理
  16. HTML转PDF浅析
  17. Android手机设备唯一标识符
  18. 如何衡量一个算法的好坏
  19. 百度地图 pc浏览器获取经纬度
  20. 企业邮箱邮件撤回可撤回几次?邮件误删恢复怎么用?

热门文章

  1. 目前看的GNN论文的一些总结
  2. 【收藏】NLP技术学习路线图,值得收藏,附下载
  3. 【福利派送】高质量AI书籍免费送给大家
  4. 表妹即将去读研,我送了她11个建议
  5. 【每日算法Day 97】经典面试题:求两个数组最小差
  6. 【每日算法Day 61】LeetCode 672. 灯泡开关 Ⅱ
  7. 7.1 API:GaussianMixture
  8. flask_restplus和swagger
  9. django urls路由匹配分发
  10. Jetpack来了:走近Google标准应用架构