У меня есть один пользователь моего приложения для iPhone, который жалуется, что оно не работает при использовании его мобильного подключения для передачи данных (но отлично работает через Wi-Fi). Мое приложение делает запрос к стороннему REST API, и я использую для этого библиотеку ASIHTTPRequest.
Одним из параметров моего HTTP-запроса является имя пользователя (то есть адрес электронной почты), поэтому я кодирую имя пользователя, используя следующий код:
-(NSString *) encodeString:(NSString *) string
{
NSString * returnString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef) string,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8 );
return [returnString autorelease];
}
Затем это встраивается в URL-адрес следующим образом:
// Setup the url we need to make the request to the sharkscope API
NSString * urlString = [NSString stringWithFormat: @"%SERVICEADDRESSHERE?Username=%@&Password=%@",
encodedUserName, m_md5Key];
NSURL * url = [NSURL URLWithString:urlString];
request = [[ASIHTTPRequest requestWithURL:url] retain];
Из моего приложения отправляется запрос со следующим именем пользователя:
Username=Fred.Bloggs%40wanadoo.fr
Для этого пользователя на сервер при использовании его мобильного подключения для передачи данных поступает следующее:
Username=Fred.Bloogs%2540wanadoo.fr
Таким образом, очевидно, что символ % кодируется где-то между моим вызовом requestWithURL и его поступлением на сервер. Я не могу понять причину, потому что у меня есть сотни других пользователей, которые могут нормально выполнять запросы через свое подключение для передачи данных.
Нужно ли мне вообще кодировать значения, переданные в requestWithURL?
Кто-нибудь знает, на каком этапе перекодируется символ %. Я предполагаю, что это должно быть в библиотеке ASIHTTP, но не могу понять, какие обстоятельства могут вызвать это в этом случае.