【问题标题】:Request always fail on distant server远程服务器上的请求总是失败
【发布时间】:2012-05-07 11:29:22
【问题描述】:

我正在为我的 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 时,一切正常。但是当我通过远程服务器执行此操作时,我的请求总是失败,没有任何消息。

这是我用 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 之类的浏览器一起使用,它就可以完美运行!

感谢您的帮助。

附:我已经找到了一篇关于对代码进行一些更改的帖子(将@sythesis 更改为手写的getter / setter,但仍然无法正常工作)

【问题讨论】:

    标签: ios web-services asihttprequest


    【解决方案1】:

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

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

    【讨论】:

    • 如果我使用 $_POST,它为什么要等待一个 GET 请求? (我不是很擅长 PHP,如果问题看起来有点“新手”,我很抱歉。我尝试将 AFNNetworking 与 NSURLRequest 一起使用,但 ASIHTTPRequest 看起来更易于使用
    • 我的意思是如果我使用 $_REQUEST
    • 您指定的 URL (myURL/iOS/objc.php?getWines=1) 需要传入的 GET 参数 (getWines)。每当您在一组传入 URL 的参数的开头看到问号时,这就是一个 GET 请求。此外,一旦您开始考虑使用 Blocks,AFNetworking 的使用和共享就会简单得多。
    • 好的,感谢您的解释,但我想知道为什么我的 localhost API 得到了结果,而远程服务器却没有?
    • 不知道。底线是,如果您可以在浏览器中访问该 URL 并获得返回,那么您应该能够在请求中使用完全相同的 URL,并且不添加任何 POST 参数,它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多