Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSURLRequest - encode url for NSURLRequest POST Body (iPhone objective-C)

I am sending a post using NSURLRequest.

NSURL *url = [NSURL URLWithString:someUrlString];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [parameterString length]];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody: [parameterString dataUsingEncoding:NSUTF8StringEncoding]];

Within the body of the Request I am encoding the following NVP:

returnURL=http://someSite.com

The post is going through successfully, but I get an error back. The error states an invalid url.

So, I changed it to:

returnURL=http:%2F%2FsomeSite.com

With the same error.

I have also double checked it with Todd Ditchendorf's HTTP Client, with the same results.

I know I must be encoding this wrong can someone tell me what I am doing wrong?

Thanks Corey

**UPDATE: Thanks to those who answered. I missed an ampersand in my NVP values. So of course, as soon as I fixed it, everything was fine. What I suspectede, the encoding of a url in the body of the post was incorrect. I am not using the ASIHTTPRequest framework, but it did help me troubleshoot the problem (overkill for what I needed). **

like image 903
Corey Floyd Avatar asked Apr 24 '09 21:04

Corey Floyd


1 Answers

Consider using Ben Copsey's ASIHTTPRequest framework for generating and sending synchronous and asynchronous HTTTP requests (POST and GET):

ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:@"http://someSite.com"] autorelease];
[request setPostValue:@"myValue1" forKey:@"myFormField1"];
[request setPostValue:@"myValue2" forKey:@"myFormField2"];
// etc.
[request start];
NSError *error = [request error];
if (!error)
  NSString *response = [request responseString];

His framework is a huge time-saver.

like image 105
Alex Reynolds Avatar answered Sep 23 '22 01:09

Alex Reynolds