NSURLConnection和空的post变量

时间:2010-04-20 23:06:37

标签: iphone post

我最终会遇到这个问题,因为我过去使用的代码非常相似,而且效果很好。

以下代码导致服务器上出现空$_POST个变量。我用以下方法验证了这一点:

file_put_contents('log_file_name', "log: ".$word, FILE_APPEND);

log_file_name的唯一内容是“log:”

然后我用一个简单的HTML表单验证了PHP。它按预期执行。

Objective-C:

    NSString *word = @"this_word_gets_lost";
    NSString *myRequestString =  [NSString stringWithFormat:@"word=%@",
                                  word];

    [self postAsynchronousPHPRequest:myRequestString toPage:@"http://www.mysite.com/pagefolder/mypage.php" delegate:nil];
}

-(void) postAsynchronousPHPRequest:(NSString*)request toPage:(NSString*)URL delegate:(id)delegate{
    NSData *requestData = [ NSData dataWithBytes: [ request UTF8String ] length: [ request length ] ];
    NSMutableURLRequest *URLrequest = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString: URL ] ]; 
    [ URLrequest setHTTPMethod: @"POST" ];
    [ URLrequest setHTTPBody: requestData ];

    [ NSURLConnection connectionWithRequest:URLrequest delegate:delegate];
    [URLrequest release];
}

PHP:

$word = $_POST['word'];
file_put_contents('log_file_name', "log: ".$word, FILE_APPEND);

我在Objective-C中做错了什么导致$_POST变量在服务器上为空?

2 个答案:

答案 0 :(得分:2)

如果您的代码是直接复制粘贴,则在@之后缺少NSString *word符号。如果那不是问题,可能是NSData *requestData = [ NSData dataWithBytes: [ request UTF8String ] length: [ request length ] ];。相反,尝试:

NSData *requestData = [request dataUsingEncoding:NSUTF8StringEncoding];  

编辑:我不是HTTP方面的专家,但我认为重定向通常会杀死POST数据,因为数据直接发送到服务器(请参阅here) - IE将显然有时会自动重新提交POST,但它不是HTTP规范的一部分。

答案 1 :(得分:2)

好的,现在我真的很笨。我发现了问题。

在我的网站上,实际网址为:http://www.mysite.com/PageFolder/mypage.php 其中包含重定向步骤,以便http://www.mysite.com/pagefolder/mypage.php内的所有文档请求都重定向到PageFolder

当我将Objective-C代码中的URL更改为不使用重定向页面时,我的帖子变量工作正常。

我将撤消我对此回复的接受,并对可以解释为什么重定向可能会杀死帖子数据的任何人表示赞赏。