我精于此,因为过去我使用过非常相似的代码,而且效果很好。

以下代码在服务器上导致空的$_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变量在服务器上为空?

最佳答案

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

NSData *requestData = [request dataUsingEncoding:NSUTF8StringEncoding];


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

10-07 14:27