У меня есть один пользователь моего приложения 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, но не могу понять, какие обстоятельства вызовут это в этом случае.