Ошибка с NSURLConnection .....? - PullRequest
       12

Ошибка с NSURLConnection .....?

1 голос
/ 28 ноября 2009

Я пытаюсь отправить данные на сервер с моего клиента IPhone. Это работает нормально для большинства значений, но когда я пытаюсь отправить строку типа «IPhone + Какао», сервер показывает строку как «IPhone Cocoa». Я пытался гуглить, но безуспешно, есть ли причина для этого.

Вот мой код

-(void)sendRequestNSString *)aRequest {

NSMutableURLRequest *request =
     [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:kURLRequest]];

NSString *httpBody = 
[NSString stringWithFormat:@"%@=%@",
[requestString stringByAddingPercentEscapesUsingEncoding:NSUTF8St ringEncoding], 
[aRequest stringByAddingPercentEscapesUsingEncoding:NSUTF8St ringEncoding]];

NSData *aData = [httpBody dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPBody:aData];
[request setHTTPMethod:@"POST"];

self.feedURLConnection = 
       [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

У меня действительно проблемы с поиском решения для этого. Это ошибка или я ошибаюсь где-то в моем коде. Есть ли другой вариант сделать это

1 Ответ

4 голосов
/ 28 ноября 2009

-[NSString stringByAddingPercentEscapesUsingEncoding:] не следует использовать для кодирования значений параметров. Он оставляет некоторые специальные символы (+, & и т. Д.) Незашифрованными (как и должно быть, если вы кодировали URL).

Используйте следующее:

NSString *escapedParameter = [(NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,  (CFStringRef)unescapedParameter, NULL,  CFSTR("?=&+"), kCFStringEncodingUTF8) autorelease];

Не так красиво, как stringByAddingPercentEscapesUsingEncoding:, но вы можете легко сделать макрос для этого.

http://arstechnica.com/apple/news/2009/01/iphone-dev-building-proper-mailto-urls.ars был написан еще в январе, когда я обнаружил похожие проблемы с созданием mailto: URL для отправки на -[UIApplication openURL:].

N.B. Добро пожаловать в переполнение стека! Не забудьте прочитать FAQ и пометить принятые ответы на свои вопросы (если, конечно, это хорошие ответы, которые стоит принять).

...