ASIHTTPRequest POST разделяет заголовок + данные? - PullRequest
1 голос
/ 15 февраля 2011

Я использую ASIHTTPRequest для отправки данных на удаленный сервер на iPhone 4.2.1.Когда я отправляю следующий запрос на наш сервер, я получаю ответ 400 (я удалил IP-адрес):

   NSString dataString = @"data1=00&data2=00&data3=00";

   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:<ipremoved>]]];
   [request appendPostData:[dataString dataUsingEncoding:NSUTF8StringEncoding]];
   [request setRequestMethod:@"POST"];
   [request addRequestHeader:@"User-Agent" value:@"iphone app"];
   [request addRequestHeader:@"Content-Type" value:@"application/octet-stream"];
   request.delegate = self;
   [request startAsynchronous];

Когда я отправляю те же данные с помощью curl, я получаю ответ 200:

    curl -H "User-Agent: iphone app" -H "Accept:" -H "Content-Type:application/octet-stream" --data-ascii "data1=00&data2=00&data3=00" --location <ipremoved> -v

Мой коллега заявляет, что в случае сбоя ASIHTTPRequest требуется две операции чтения сокетов: одна для заголовка и одна для данных.Судя по всему, сервер не оборудован для правильного анализа, поэтому я пытаюсь обойти это.

Если я настрою прокси между iPhone и Mac и запустю Paros (для просмотра пакетов), проблема исчезнет.Paros объединяет заголовок и данные таким образом, чтобы все они были получены сервером за одно чтение сокета.

Я пробовал несколько вещей, предложенных в других статьях, включая отключение постоянных соединений, но мне не повезло,Я также попытался сделать ASIHTTPFormRequest, но сервер не любит сгенерированный формат данных.

Любые предложения будут оценены.

Спасибо.

1 Ответ

0 голосов
/ 15 февраля 2011

«Мой коллега заявляет, что в случай сбоя, ASIHTTPRequest требуется два чтения сокетов: один для заголовок и один для данных. Судя по всему на данный момент сервера нет оборудован, чтобы разобрать это правильно, поэтому я я пытаюсь обойти это. "

Знаете ли вы это как факт или это догадки? Такой HTTP-сервер будет очень сломан и вызовет всевозможные случайные проблемы.

Вы смотрели на то, что Парос получает и что он посылает? Возможно, это случайно исправляет ошибку в запросе, и если это так, вы можете исправить запрос таким же образом.

...