如何在PHP中回复来自iPhone应用程序的帖子?

如何在PHP中回复来自iPhone应用程序的帖子?,php,iphone,http,Php,Iphone,Http,我使用目标C代码创建NSUrlConnection,如下所示: //prepar request NSString *urlString = [NSString stringWithFormat:@"http://ctruman.info/post.php"]; NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL UR

我使用目标C代码创建NSUrlConnection,如下所示:

//prepar request
    NSString *urlString = [NSString stringWithFormat:@"http://ctruman.info/post.php"];
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];

    //set headers
    NSString *contentType = [NSString stringWithFormat:@"text/xml"];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    //create the body
    NSString *formData = [[NSString alloc] initWithFormat:@"%@  %@", username.text, password.text];

    NSData *postData = [[NSString stringWithString:formData] dataUsingEncoding:NSUTF8StringEncoding];

    //post
    [request setHTTPBody:postData];

    //get response
    NSHTTPURLResponse* urlResponse = nil;  
    NSError *error = [[NSError alloc] init];  
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];  
    NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSLog(@"Response Code: %d", [urlResponse statusCode]);
    if ([urlResponse statusCode] >= 200 && [urlResponse statusCode] < 300) {
        NSLog(@"Response: %@", result);
     }  
//准备请求
NSString*urlString=[NSString stringWithFormat:@]http://ctruman.info/post.php"];
NSMutableURLRequest*请求=[[[NSMutableURLRequest alloc]init]autorelease];
[请求设置URL:[NSURL URLWithString:urlString]];
[请求设置HttpMethod:@“POST”];
//设置标题
NSString*contentType=[NSString stringWithFormat:@“text/xml”];
[请求addValue:contentType for HttpHeaderField:@“内容类型”];
//创造身体
NSString*formData=[[NSString alloc]initWithFormat:@“%@%@”,username.text,password.text];
NSData*postData=[[NSString stringWithString:formData]数据使用编码:NSUTF8StringEncoding];
//职位
[请求setHTTPBody:postData];
//得到回应
NSHTTPURLResponse*urlResponse=nil;
NSError*error=[[NSError alloc]init];
NSData*responseData=[NSURLConnection sendSynchronousRequest:request ReturnInResponse:&urlResponse错误:&error];
NSString*result=[[NSString alloc]initWithData:responseData编码:NSUTF8StringEncoding];
NSLog(@“响应代码:%d”,[urlResponse statusCode]);
如果([urlResponse statusCode]>=200&&[urlResponse statusCode]<300){
NSLog(@“响应:%@”,结果);
}  
然后,我有一个php脚本,用来读取发送的POST变量:

<?php
print('<pre>');
print_r($_POST);
print('</pre>');
?>

当我执行此操作时,NSLog会显示以下内容:
NSString *name = @"Anne"; // encode this
NSString *pass = @"p4ssw0rd"; // encode this
NSString *requestString = [NSString stringWithFormat:@"&name=%@&pass=%@",name,pass];
NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: @"http://localhost/post.php"]]; 
[request setHTTPMethod: @"POST"];
[request setHTTPBody: requestData];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
NSString *resultString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@",resultString);
排列 ( )
为什么不打印我的post变量?我是否发出了错误的POST请求?

在我看来,PHP试图读取您提交的POST,就好像它是一个格式正确的PHP POST负载一样。相反,您将内容类型设置为XML内容——这可能会混淆PHP。它寻找编码的变量,并找到XML

您有两种选择:

  • 读入XML并使用PHP自己解析: $xml=文件\u获取\u内容('php://input'); 读取输入的示例如下: 然后可以使用PHP的xml支持对其进行解析:

  • 重新编码objective-C,将正常POST参数发送到服务器。我使用ASIHTTPRequest库,这很简单


  • 在我看来,PHP正在试图阅读您提交的帖子,就好像它是一个格式正确的PHP帖子负载一样。相反,您将内容类型设置为XML内容——这可能会混淆PHP。它寻找编码的变量,并找到XML

    您有两种选择:

  • 读入XML并使用PHP自己解析: $xml=文件\u获取\u内容('php://input'); 读取输入的示例如下: 然后可以使用PHP的xml支持对其进行解析:

  • 重新编码objective-C,将正常POST参数发送到服务器。我使用ASIHTTPRequest库,这很简单


  • 以下代码工作正常

    目标-C

    <?php
    
    print_r($_POST);
    
    ?>
    
    PHP

    Array
    (
        [name] => Anne
        [pass] => p4ssw0rd
    )
    
    备选方案

    签出辅助请求:

    以下代码工作正常

    目标-C

    <?php
    
    print_r($_POST);
    
    ?>
    
    PHP

    Array
    (
        [name] => Anne
        [pass] => p4ssw0rd
    )
    
    备选方案

    签出辅助请求:

    这非常有效,谢谢!错误在于我的内容类型,并将请求字符串设置为UTF8String。这非常有效,谢谢!该错误与我的内容类型有关,并使请求字符串成为UTF8String。