ASIHTTPRequest проблема с параметрами при использовании 3G-соединения (Отлично с Wifi) - PullRequest
0 голосов
/ 14 сентября 2011

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

1 Ответ

1 голос
/ 15 сентября 2011

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

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

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

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

...