Отправка данных POST с помощью NSURLConnection или ASIHTTPRequest

Я попытался отправить данные POST в файл php с помощью asynch и synch NSURLConnection и ASIHTTPRequest, но оба отказываются фактически повторять что-либо в $_POST. Мой файл s.php выглядит так:

<?php
echo 'Hi There';
echo $_POST['fname'];
foreach ($_POST as $i => $value) {
     echo($i);
}
?>

Мой ASIHTTRequest:

NSURL *url = [[NSURL alloc] initWithString:@"http://server.com/s.php"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"Ben" forKey:@"fname"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestFinished:)];
[request startAsynchronous];

Который печатает только строку Hi There, когда возвращается к requestFinished.

Изменить: используя ASIFormDataRequest, я почти уверен, что запрос уже настроен на POST, по крайней мере, похоже, нет способа установить его вручную. Когда я попробовал NSURLConnection, я использовал:

NSURL *url = [NSURL URLWithString:@"http://server.com/s.php"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[[NSString stringWithFormat:@"fname=carl"] dataUsingEncoding:NSUTF8StringEncoding]];
NSURLResponse *response;
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
NSString *stringResponse = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding]; 
NSLog(@"%@",stringResponse);

И все еще получаю только строку «Привет», а также получаю нормальные ответы, когда использую html-форму.


person apchait    schedule 16.06.2011    source источник
comment
добавьте эту строку в свой код; [запрос setHTTPMethod:@POST];   -  person Mobile Developer iOS Android    schedule 16.06.2011
comment
Работает нормально, пользователь 768531. Нет проблем в приведенном выше коде. Возможно, проблема не в коде.   -  person Priyanka    schedule 16.06.2011
comment
@impossiblepriya Может быть, это что-то на стороне сервера?   -  person apchait    schedule 16.06.2011
comment
это ischool.berkeley.edu/~ariel/server/s2.php где ваш файл php??   -  person Priyanka    schedule 17.06.2011
comment
@impossiblepriya Да, файл php, который я разместил вверху, находится по этому адресу.   -  person apchait    schedule 18.06.2011
comment
Я нашел аналогичный вопрос с ответом, который непосредственно касается вашего. stackoverflow.com/ вопросы/330060/   -  person Matej    schedule 07.03.2012
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он слишком старый, и теперь никто не использует эту структуру.   -  person GameLoading    schedule 13.07.2018


Ответы (2)


Я думаю, вам нужно установить некоторые заголовки http также перед публикацией данных, тогда только php может распознать, что страница запрошена с использованием метода post

попробуй с этой строкой

[запрос setHTTPMethod: @"POST"];

person Lavy John    schedule 16.06.2011
comment
ASIHTTP устанавливает автоматическую публикацию, я попробовал NSURLConnection с методом, установленным на POST, и получил тот же результат, что и показанный в редактировании вопроса выше. Я думаю, что что-то не так на стороне сервера? - person apchait; 16.06.2011

Попробуй.

    NSURL *url = [[NSURL alloc] initWithString:@"http://server.com/s.php"];
   ASIHTTPRequest *Asi_request = [ASIHTTPRequest requestWithURL:url];
    [request setPostValue:@"Ben" forKey:@"fname"];
    [request setDelegate:self];
    [request setDidFinishSelector:@selector(requestFinished:)];
    [request startAsynchronous];
[request setHTTPMethod: @"POST"];

//если это не сработает, то вы должны сгенерировать очередь в файле appledelegate, см.:ссылка

может это поможет вам.

person GameLoading    schedule 16.06.2011
comment
ASIHTTPRequest не отвечает на «setHTTPMethod», я почти уверен, что он автоматически устанавливает его в POST - person apchait; 16.06.2011
comment
[Asi_request setRequestMethod:@POST]; здесь Asi_request является объектом ASIHTTPRequest. я использую это. - person GameLoading; 17.06.2011