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 }