在iOS中使用NSURLConnection的表单数据请求

我想在iOS中使用NSURLConnection使http表单发布。 我在HTML表单中有两个表单域和一个file upload选项。 当我使用NSURLConnection做同样的事情时,我没有得到回应。

 NSString *urlString = @"http://url/test.php"; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data"]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"file\"; filename=\"myphoto.png\"rn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-streamrnrn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:filedata]; [body appendData:[[NSString stringWithFormat:@"&s=YL4e6ouKirNDgCk0xV2HKixt&hw=141246514ytdjadh"] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:body]; NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; NSLog(@"RETURNED:%@",returnString); 

但是,当我使用ASIHTTPRequest并写下面的代码,它的工作,我得到一个回应。

 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://url/test.php"]]; [request setPostValue:@"YL4e6ouKirNDgCk0xV2HKixt&hw" forKey:@"ssf"]; [request setPostValue:@"141246514ytdjadh" forKey:@"sds"]; [request setData:filedata withFileName:@"myphoto.png" andContentType:@"image/jpeg" forKey:@"file"]; [request startSynchronous]; NSError *error = [request error]; if (!error) { NSString *response = [request responseString]; NSLog(@"response:%@",response); } 

任何人都可以告诉我,我做错NSURLConnection部分?

你没有复制那个链接的例子。 在该教程中,HTTPBody参数应该是NSData的一个实例,而不是NSString。

 [request setHTTPMethod:@"POST"]; NSString *myString = [NSString stringWithFormat:@"value1=test3&value2=test"]; [request setHTTPBody:[myString dataUsingEncoding:NSUTF8StringEncoding]]; 

我试过这个代码上传图片及其工作。 增加了边界。

 NSString *urlString = @"URL"; NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; NSString *boundary = @"---------------------------14737809831466499882746641449"; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; [request addValue:contentType forHTTPHeaderField:@"Content-Type"]; NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"Test.png\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[NSData dataWithData:imageData]]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:body]; NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

这对我来说工作得很好。

  - (void)viewDidLoad { [super viewDidLoad]; NSMutableURLRequest *req=[[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"http:///URL/iinsert.php"]]; NSString *myreqstr=@"name=abhii&address=knrr"; NSData *myreqdata=[NSData dataWithBytes:[myreqstr UTF8String] length:[myreqstr length]]; [req setHTTPMethod:@"POST"]; [ req setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; [ req setHTTPBody: myreqdata ]; //[req setValue:@"abhii" forHTTPHeaderField:@"name"]; //[req setValue:@"kar" forHTTPHeaderField:@"address"]; NSData *data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil]; NSLog(@"%@",data); NSString *returnstring=[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"%@",returnstring); // Do any additional setup after loading the view, typically from a nib. } 

尝试这个 ….

 NSURL *url = [NSURL URLWithString:@"URL"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"POST"]; NSString *myRequestString =@"Request string"; NSLog(@"%@",myRequestString); NSData *myRequestData = [ NSData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ]; [ request setHTTPBody: myRequestData ]; NSURLResponse *response; NSError *err; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; NSString *content = [NSString stringWithUTF8String:[responseData bytes]]; 

你有几个

 rn 

在你的弦乐结束。 他们都应该是

 \r\n 

更确切地说,它应该是:

 [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"file\"; filename=\"myphoto.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];