Я использую ASIHTTPRequest для отправки данных POST на удаленный сервер на 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, но серверу не нравится сгенерированный формат данных.
Мы ценим любые предложения.
Спасибо.