Проблема ASIHTTPRequest с параметрами, использующими соединение 3G (отлично с Wi-Fi)

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


person JamieH    schedule 14.09.2011    source источник


Ответы (1)


Повреждение, вероятно, происходит из-за прокси-сервера или прозрачного прокси-сервера в соединении 3G, установленного оператором связи.

Возможные обходные пути:

  • Используйте POST вместо GET
  • Используйте https вместо http
  • Использовать http на нестандартном порту

Чтобы доказать эту теорию, вы можете попробовать попросить его ввести тот же/аналогичный запрос в Safari на iOS, когда он использует 3g-соединение.

person JosephH    schedule 15.09.2011
comment
Спасибо за ваше предложение, он получает такое же повреждение через Safari, поэтому я уверен, что ваша теория верна. К сожалению, это сторонний веб-сервис, поэтому я не могу легко изменить то, как я его называю. - person JamieH; 15.09.2011