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 кодирует символы с различным количеством байтов.