PHP Curl发布请求无法正常工作

时间:2017-02-21 21:47:13

标签: php curl

它没有发送帖子请求。我不确定为什么,或者我做错了什么。

这是数据库中的API:

      //servapi added to code for clarity
      $servapi = "https://(hidingwebsiteforthispost).com/api.php?key=(my_key)&service=31&action=order&profile=[link]&amount=[amount]"

       //original code
        $arrayFind    = array(
            '[link]',
            '[amount]'
        );
        $arrayReplace = array(
            $link,
            $quanity
        );
        $APILink      = $servapi;
        $APILink      = str_replace($arrayFind, $arrayReplace, $APILink);
        $ch           = curl_init();
        curl_setopt($ch, CURLOPT_URL, $APILink);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 3);
        curl_exec($ch);
        curl_close($ch);

主持人添加:

用户通过查看目标服务器上的帐户来验证POST请求是否成功。如果成功,将在他的帐户下启动新订单。当他使用来自requestmaker.com的API字符串时,会创建一个新订单,但是当他运行上述代码时,不会创建新订单。

当使用var_dump检查来自curl_exec($ch)的返回数据包时,用户声明响应为空。

用户还更新了他的代码,将CURLOPT_POST设置为true。

2 个答案:

答案 0 :(得分:1)

您实际上并没有发布帖子请求,您需要添加

curl_setopt($ch, CURLOPT_POST, true);

以发送POST请求。

有关详细信息,请参阅curl documentation,特别是curl_setopt documentation

答案 1 :(得分:1)

除了@nvisser的建议外,您还应该捕获并查看curl请求的响应。按如下方式更改curl_exec

$response = curl_exec($ch);

因为您已将CURLOPT_RETURNTRANSFER设置为TRUE,所以curl_exec将所有响应封装为字符串并将它们返回到您选择的变量。

输出回复,您可能会找到更多信息来帮助您诊断问题。

在评论讨论后添加

以下是我们应该做的事情:

由于您无法控制网络,请尝试在虚拟专用服务器上安装并激活Web服务器,以便您可以在http://localhost/fakeServer.php

接收和处理请求

安装Apache2或NGINX并进行设置后,在该Web目录的根目录下创建一个名为fakeServer.php的小程序,并将API网址设置为http://localhost/fakeServer.php。在该脚本中,创建一个日志,每次运行脚本时都会输出$_POST标头的内容。

通过这种方式,您可以证明您的脚本是否正在向接收服务器发送请求及其外观。这将帮助您调试脚本以使用API​​类,并验证所有您的代码格式正确且运行正常。

fakeServer.php输出回复并在程序中检查该回复。如果一切正常,fakeServer.php的输出将最终显示在$response变量中。

如果一切都运行不正常,我们可以更好地控制测试环境以找到问题。