使用NSURLConnection或ASIHTTPRequest发送POST数据

时间:2011-06-16 05:35:13

标签: php iphone post nsurlconnection asihttprequest

我尝试使用asynch和同步NSURLConnection和ASIHTTPRequest将POST数据发送到php文件,但两者都拒绝实际回显$ _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];

只有在返回requestFinished时才打印Hi There行。

编辑: 通过使用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表单时,仍然只获得Hi There行,并获得正常回复。

2 个答案:

答案 0 :(得分:0)

我认为你必须在发布数据之前设置一些http标题,然后只有php才能识别使用post方法请求的页面

尝试使用此行

[request setHTTPMethod:@“POST”];

答案 1 :(得分:-1)

试试吧。

    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文件中生成队列,请参阅:link

这可能对你有所帮助。