NSURLRequest - кодировать URL для тела NSURLRequest POST (iPhone objective-C)

Я отправляю сообщение с помощью 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]];

Внутри тела запроса я кодирую следующий NVP:

returnURL = http://someSite.com

Сообщение проходит успешно, но я получаю сообщение об ошибке. Ошибка указывает неверный URL.

Итак, я изменил его на:

ReturnUrl = HTTP:% 2F% 2FsomeSite.com

С той же ошибкой.

Я также дважды проверил его с HTTP-клиентом Todd Ditchendorf с теми же результатами.

Я знаю, что я должен кодировать это неправильно, может кто-нибудь сказать мне, что я делаю неправильно?

Спасибо Corey

** UPDATE: Спасибо тем, кто ответил. Я пропустил амперсанд в своих значениях NVP. Поэтому, конечно, как только я это исправил, все было в порядке. То, что я подозревал, кодирование url в теле сообщения было неправильным. Я не использую структуру ASIHTTPRequest, но это помогло мне устранить проблему (переполнение для того, что мне было нужно). **

Ответы

Ответ 1

Рассмотрите возможность использования базы данных Ben Copsey ASIHTTPRequest для генерации и отправки синхронных и асинхронных HTTTP-запросов (POST и 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];

Его каркас - это огромная экономия времени.

Ответ 2

Я не знаю, решает ли эта проблема, но

[parameterString length]

часто не равна длине

[parameterString dataUsingEncoding:NSUTF8StringEncoding]

потому что UTF8 кодирует символы с различным количеством байтов.