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 }