请求总是在远程服务器上失败

时间:2012-05-07 11:29:22

标签: ios web-services asihttprequest

我正在为我的iOS应用程序使用ASIHTTPRequest。我必须通过PHP API连接到数据库(下面复制)。这是我用ASIHTTPRequest执行请求的函数:

-(void)startRequest {
    NSURL *url = [NSURL URLWithString:PHP_SCRIPT];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setDelegate:self];
    [request setStringEncoding:NSUTF8StringEncoding];
    [request setTimeOutSeconds:50];
    [request setPostValue:@"1" forKey:@"getWines"];
    [request startAsynchronous];
}

当我使用MAMP运行到一个API托管的localy时,一切正常。但是当我通过我的远程服务器执行此操作时,我的请求总是失败,没有消息。

这是我用PHP编写的API,托管在我的远程服务器上:

<?php
 function connectToDB(){
     $connexion = mysqli_connect(HOST, USER, PASSWORD, DATABASE);
     return $connexion;
 }

 function getWines($connexion) {
     $req = "SELECT name, category FROM table WHERE prize_50  != 0 OR
                                                            prize_75  != 0 OR
                                                            prize_150 != 0 OR
                                                            prize_300 != 0";

     $res = mysqli_query($connexion, $req);

     echo '[';

     while($current = mysqli_fetch_assoc($res)) {
        extract($current);
        echo json_encode($current);
     }

     echo ']';

 }

 function getWine($connexion) {

     $name = $_REQUEST["name"];
     $req = "SELECT * FROM table WHERE name='".$name."'";


     $res = mysqli_query($connexion, $req);
     echo "[";
     echo json_encode(mysqli_fetch_assoc($res));
     echo "]";
 }

 $connexion = connectToDB();
 if($connexion) { 
    echo "connected"; 

    if(isset($_REQUEST["getWine"])) {
        getWine($connexion);
    }

    else if(isset($_REQUEST["getWines"])) {
        getWines($connexion);
    }

 }

 else {
     echo "unable to connect to the database";
 }



?>

我不知道发生了什么,以及为什么它在localHost上工作而不在我的远程服务器上。如果我将API与http://myURL/iOS/objc.php?getWines=1这样的浏览器一起使用,那就完美了!

感谢您的帮助。

P.S。我已经找到一篇关于在代码中进行一些更改的帖子(更改@sythesis用于手写的getter / setter,但仍然无效)

1 个答案:

答案 0 :(得分:0)

您的API看起来期待GET请求而不是POST。使用包含整个URL的NSString创建URL,不要设置任何POST属性。

此外,您可能想要开始检查ASI的替代品。它目前尚未开发,可能永远不会符合ARC标准。我切换到AFNetworking并喜欢它。