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提交数据的更多相关文章

  1. HTTP请求中的form data和request payload的区别

    HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...

  2. [整理]Ajax Post请求下的Form Data和Request Payload

    Ajax Post请求下的Form Data和Request Payload 通常情况下,我们通过Post提交表单,以键值对的形式存储在请求体中.此时的reqeuest headers会有Conten ...

  3. 【转】HTTP请求中的form data和request payload的区别

    jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样的,比如用$.ajax方法发送请求时(data参数是一个JSON.stringify()处理后的字符串, ...

  4. [转]HTTP请求中的form data和request payload的区别

    本文转自:http://www.cnblogs.com/btgyoyo/p/6141480.html jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样的 ...

  5. 【转载】一步一步搭建自己的iOS网络请求库

    一步一步搭建自己的iOS网络请求库(一) 大家好,我是LastDay,很久没有写博客了,这周会分享一个的HTTP请求库的编写经验. 简单的介绍 介绍一下,NSURLSession是iOS7中新的网络接 ...

  6. HTTP 请求中的 Form Data 与 Request Payload 的区别

    HTTP 请求中的 Form Data 与 Request Payload 的区别 前端开发中经常会用到 AJAX 发送异步请求,对于 POST 类型的请求会附带请求数据.而常用的两种传参方式为:Fo ...

  7. AngularJS $http配置为form data 提交

    AngularJS $http配置为form data 提交 $scope.formData = {}; $http({ method: 'POST', url: '/user/', // pass ...

  8. VUE axios 发送 Form Data 格式数据请求

    axios 默认是 Payload 格式数据请求,但有时候后端接收参数要求必须是 Form Data 格式的,所以我们就得进行转换.Payload 和 Form Data 的主要设置是根据请求头的 C ...

  9. springmvc接口ios网络请求

    springmvc:   application/json;charset=utf-8的ios网络请求: 后台使用 @RequestBody注解参数接收:

随机推荐

  1. 安装boost库(Windows)

    1. 下载 官网:http://www.boost.org/ 主页:https://sourceforge.net/projects/boost/ 当前最新版:V1.61.0 2. 编译 首先,生成b ...

  2. Nopcommerce 二次开发2 WEB

    using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel.Syndica ...

  3. Window对象方法

    Window对象方法 scrollBy() 按照指定的像素值来滚动内容. scrollTo() 把内容滚动到指定的坐标. setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式. ...

  4. java温故系列之环境配置

    -----下面的配置符号全部复制,否则会出错 JDK配置: 首先去度娘下载jdk,然后安装.这个就不贴地址了,可能会找不到 1.右键我的电脑->属性->高级系统设置->环境变量 2. ...

  5. 脚本工具: 查看当前系统被写入的FD

    #!/bin/bash touch /tmp/sn2 /tmp/sn4 /tmp/sn6 /tmp/sn3 redir=/dev/null which lsof >&/dev/null ...

  6. oracle number型日期转date型日期

    在搞数据库时,发现有这样的一个字段,类型是NUMBER(38),查看了一下里面的数据,都是这样的, 13239576781141321326994295132212930680413221297162 ...

  7. ubuntu安装mysql-python出错,EnvironmentError: mysql_config not found

    安装mysql-python包出错 Downloading MySQL-python-.zip (108kB) % |████████████████████████████████| 112kB 1 ...

  8. 第三次作业:caculator

    第三次作业 作业链接 ********* 遇到的问题: Scan类: 队列的使用方法不了解,上网查询并自己练习了一下才初步了解,才运用到作业 . 判断数字用的 if (input[i] >= ' ...

  9. php中的可变函数和匿名函数

    可变函数 一个函数的名,是一个变量的时候,就称为可变函数 <?php header("content-type:text/html;charset=utf8"); funct ...

  10. 一、MMA概述

    一.MMA概述                     返回目录页1.MMA的使用2.函数3.表达式4.数值计算和符号计算5.数据的表示6.程序设计-------------------------- ...