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 是我顶一个一个字符串 可以定义你喜欢的任意值
-(void)multiPartPost:(NSDictionary *)dicData{
NSURL *url = [NSURL URLWithString:@"http://192.168.1.112:8080/TestSerlvet/interfaces"];
NSMutableString *bodyContent = [NSMutableString string];
for(NSString *key in dicData.allKeys){
id value = [dicData objectForKey:key];
[bodyContent appendFormat:@"--%@\r\n",POST_BOUNDS];
[bodyContent appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
[bodyContent appendFormat:@"%@\r\n",value];
}
[bodyContent appendFormat:@"--%@--\r\n",POST_BOUNDS];
NSData *bodyData=[bodyContent dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:];
[request addValue:[NSString stringWithFormat:@"multipart/form-data;boundary=%@",POST_BOUNDS] forHTTPHeaderField:@"Content-Type"];
[request addValue: [NSString stringWithFormat:@"%zd",bodyData.length] forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:bodyData];
NSLog(@"请求的长度%@",[NSString stringWithFormat:@"%zd",bodyData.length]);
__autoreleasing NSError *error=nil;
__autoreleasing NSURLResponse *response=nil;
NSLog(@"输出Bdoy中的内容>>\n%@",[[NSString alloc]initWithData:bodyData encoding:NSUTF8StringEncoding]);
NSData *reciveData= [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if(error){
NSLog(@"出现异常%@",error);
}else{
NSHTTPURLResponse *httpResponse=(NSHTTPURLResponse *)response;
if(httpResponse.statusCode==){
NSLog(@"服务器成功响应!>>%@",[[NSString alloc]initWithData:reciveData encoding:NSUTF8StringEncoding]);
}else{
NSLog(@"服务器返回失败>>%@",[[NSString alloc]initWithData:reciveData encoding:NSUTF8StringEncoding]);
}
}
}
iOS网络请求之multipart/form-data提交数据的更多相关文章
- HTTP请求中的form data和request payload的区别
HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...
- [整理]Ajax Post请求下的Form Data和Request Payload
Ajax Post请求下的Form Data和Request Payload 通常情况下,我们通过Post提交表单,以键值对的形式存储在请求体中.此时的reqeuest headers会有Conten ...
- 【转】HTTP请求中的form data和request payload的区别
jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样的,比如用$.ajax方法发送请求时(data参数是一个JSON.stringify()处理后的字符串, ...
- [转]HTTP请求中的form data和request payload的区别
本文转自:http://www.cnblogs.com/btgyoyo/p/6141480.html jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样的 ...
- 【转载】一步一步搭建自己的iOS网络请求库
一步一步搭建自己的iOS网络请求库(一) 大家好,我是LastDay,很久没有写博客了,这周会分享一个的HTTP请求库的编写经验. 简单的介绍 介绍一下,NSURLSession是iOS7中新的网络接 ...
- HTTP 请求中的 Form Data 与 Request Payload 的区别
HTTP 请求中的 Form Data 与 Request Payload 的区别 前端开发中经常会用到 AJAX 发送异步请求,对于 POST 类型的请求会附带请求数据.而常用的两种传参方式为:Fo ...
- AngularJS $http配置为form data 提交
AngularJS $http配置为form data 提交 $scope.formData = {}; $http({ method: 'POST', url: '/user/', // pass ...
- VUE axios 发送 Form Data 格式数据请求
axios 默认是 Payload 格式数据请求,但有时候后端接收参数要求必须是 Form Data 格式的,所以我们就得进行转换.Payload 和 Form Data 的主要设置是根据请求头的 C ...
- springmvc接口ios网络请求
springmvc: application/json;charset=utf-8的ios网络请求: 后台使用 @RequestBody注解参数接收:
随机推荐
- 同一服务器上多个版本的 sqlserver ,如何连接,改变某一实例的端口号
1. SQL Server配置管理器,双击“TCP/IP” 2. TCP/IP设置 确定后重启SQL Server服务,打开SQL Server Management Studio,服务器名称输入12 ...
- 【ios 7】 之后的设置系统的状态栏隐藏的方法分享
由于在做视频播放的的项目,一直困扰的是,视频全屏幕播放的时候,系统的状态栏会隐藏不掉,虽然可以设置为透明的状态来显示,但是电池的状态一直隐藏不掉,查看网上的说法也就是说,要么来控制,他的hidden ...
- AX7: HOW TO USE TABLE METHOD EXTENSION CLASS
To create new methods on a table without customize you should use the Table method extension class. ...
- 【AppCan 开发者】北京开发者交流会之行
不久前AppCan官方组织了开发者交流会活动,我有幸参加了这次活动,官方报销全部费用,还有妹子相伴,哇哇,这是光明正大打FB的节奏啊~ (呃,说实话,这是俺第一次去帝都~心里挺激动的~) 10.25帝 ...
- HTML与CSS二三事
概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器 ...
- 【原创】android内存管理-内存泄漏原因
转载请注明出处 http://www.cnblogs.com/weiwangnuanyang/p/5704596.html 先讲一下内存泄漏的概念:内存泄露是指无用对象持续占有内存,或者内存得不到及时 ...
- PostgreSQL 在centos 7下的安装配置
安装postgresql: sudo yum install postgresql-server 初始化数据库: sudo postgresql-setup initdb 启动数据库: sudo sy ...
- 跨域的get和post的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二.最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数.当你在面试中被 ...
- Linux 之HTTP服务,APACHE
1.基础知识 HTTP:超文本传输协议,超链接URI:Uniform Resource Identifier,全局范围内唯一命名符MIME:Multipurpose Internet Mail Ext ...
- Windows 2008 server IIS 7 中开启CGI, ISAPI
默认情况下,IIS是没有开启的,需要通过下面的步骤开启