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     NSError *error=nil;
21     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 }

iOS网络请求之multipart/form-data提交数据,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。