NSURLRequest - закодировать URL для тела POST NSURLRequest (цель iPhone C) - PullRequest
13 голосов
/ 25 апреля 2009

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

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

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

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

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

Я также дважды проверил его с HTTP-клиентом Тодда Дитчендорфа, с теми же результатами.

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

Спасибо Corey

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

Ответы [ 2 ]

15 голосов
/ 25 апреля 2009

Рассмотрите возможность использования структуры 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];

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

4 голосов
/ 26 апреля 2009

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

[parameterString length]

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

[parameterString dataUsingEncoding:NSUTF8StringEncoding]

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

...