ASIFormDataRequest имеет пустое тело POST - PullRequest
0 голосов
/ 29 июля 2011

У меня было работающее приложение MacOS, которое делало POST на сервер. Я изменил URL POST, и все перестало работать.

Я скачал Tuffcode (сниффер), который показывает, что при использовании нового URL POST BODY пуст!

- (IBAction)grabURLInBackground:(id)sender
{
    NSURL *url = [NSURL URLWithString:@"url1"];
    //NSURL *url = [NSURL URLWithString:@"url2"];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setDelegate:self];
    [request addRequestHeader:@"Content-Language" value:@"en"];
    [request addRequestHeader:@"Content-Type" value:@"application/x-www-form-urlencoded"];
    [request addRequestHeader:@"Connection" value:@"keep-alive"];
    [request addRequestHeader:@"Cookie" value: [NSString stringWithFormat:@"botcust2=%@", sn]];
    [request setShouldAttemptPersistentConnection:NO];

    [request addPostValue:[input stringValue] forKey:@"input"];
    [input setStringValue:@""];
    [request startAsynchronous];

}

Переключение с url1 на url2 происходит от правильно сформированного POST BODY к пустому POST BODY. Как это может быть? Как URL может определить, что будет отправлено? Сначала я подумал, что это новый сервер, который неправильно интерпретирует POST, но если Tuffcode верен, приложение даже не отправляет данные ??

Или, может быть, я не знаю, как работает HTTP? Я в замешательстве ...

Некоторые журналы:

2011-07-29 12:28:36.018 ChatBot[6764:707] [STATUS] Starting asynchronous request <ASIFormDataRequest: 0x10188d420>
2011-07-29 12:28:36.021 ChatBot[6764:6403] 
==== Building an application/x-www-form-urlencoded body ====
input=hello
==== End of application/x-www-form-urlencoded body ====
2011-07-29 12:28:36.027 ChatBot[6764:6403] [CONNECTION] Request <ASIFormDataRequest: 0x10188d420> will not use a persistent connection
2011-07-29 12:28:36.280 ChatBot[6764:6403] [STATUS] Request <ASIFormDataRequest: 0x10188d420> finished uploading data
2011-07-29 12:28:36.374 ChatBot[6764:6403] [STATUS] Request <ASIFormDataRequest: 0x10188d420> received response headers
2011-07-29 12:28:36.375 ChatBot[6764:6403] [STATUS] Request <ASIFormDataRequest: 0x10188d420> finished downloading data (0 bytes)
2011-07-29 12:28:36.376 ChatBot[6764:6403] [STATUS] Request finished: <ASIFormDataRequest: 0x10188d420>

Ответы [ 2 ]

0 голосов
/ 16 апреля 2012

Немного по факту, но я столкнулся с чем-то похожим. Как и у вас, у меня была настройка ASIHTTPRequest для работы с предыдущим экземпляром приложения, но в новой версии POST был пуст (данные не отправлялись); Я знал, что сервер на другом конце работал нормально (тот же код, но новый хостинг / URL), поэтому я знал, что это не может быть.

Немного поиграв с ним, я вспомнил, что старый URL был submission.php, но на этот раз это была его собственная папка (так что просто / submission /), волшебным образом добавив index.php в конец моего нового URL все снова работает; так что, думаю, просто не понравилось, что в конце URL не было файла.

tl; dr - убедитесь, что URL-адрес вашего представления заканчивается именем файла (то есть: index.php или аналогичным)

NBSP

0 голосов
/ 29 июля 2011

Почему вы устанавливаете строку в null сразу после публикации?

[request addPostValue:[input stringValue] forKey:@"input"];
[input setStringValue:@""];

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...