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     __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 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM