Отправка данных POST с помощью NSURLConnection или ASIHTTPRequest - PullRequest
0 голосов
/ 16 июня 2011

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

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

Мой запрос ASIHTTR:

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.

Edit: Используя 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);

И все же только получаю строку Hi There, а также получаю обычные ответы, когда я использую html-форму.

Ответы [ 2 ]

0 голосов
/ 16 июня 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, см .: ссылка

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

0 голосов
/ 16 июня 2011

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

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

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

...