Request form data using NSURLConnection in iOS

I want to make an http form post using NSURLConnection in iOS. I have two form fields and one option to upload HTML files. When I do the same using NSURLConnection , I get no response.

 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); 

But when I use ASIHTTPRequest and write the following code in which it works, and I get a response.

 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); } 

Can someone tell me what I'm doing wrong with the NSURLConnection part?

+7
source share
5 answers

You are not copying an example of this link. In this tutorial, the HTTPBody parameter should be an instance of NSData, not NSString.

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

I tried this code to download the image and its work. Border added.

 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]; 
+8
source

This works great for me.

  - (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. } 
+2
source

Try it....

 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]]; 
+1
source

You have several

 rn 

at the end of your lines. All must be

 \r\n 

More precisely, it should be:

 [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]]; 
0
source

All Articles