2017-02-21 145 views
1

它没有发送帖子请求。我不知道为什么,或者我做错了什么。PHP Curl post post request not working no post

这是在数据库中的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。

+0

Vaxified L,为了帮助那些会回答你问题的人,请添加一些细节。你怎么知道curl_exec()函数没有向API发送数据?你有来自服务器的日志吗?您提供的所有关于您认为代码是否工作的信息将有助于我们理解您尝试过的以及您尚未尝试的内容。 –

+0

我没有自己的API,但我已经在requestmaker.com上测试了这个请求,并且它工作正常。但是,当我去发送请求在我的服务器上没有任何反应。 –

+0

所以你说这个请求应该做出一个在目标站点上可见的改变,并且当你通过另一种方法查看那个站点时,你没有看到你期望的改变。它是否正确? –

回答

1

你没有真正做一个POST请求,你会想,以发送POST请求添加

curl_setopt($ch, CURLOPT_POST, true); 

有关更多信息,请参阅curl documentation,特别是curl_setopt documentation

+0

仍然没有工作:/ –

+0

什么都没有工作?请指定此更改后的结果。 – nvisser

+0

没有真正改变。我没有/拥有api,所以我没有这个日志。我在发送请求的服务器上没有收到任何确定的错误。请求发送时根本没有任何反应。 –

1

除了@ nvisser的建议,你还应该捕获和审查curl请求的响应。更改curl_exec如下:

$response = curl_exec($ch); 

因为你已经设置CURLOPT_RETURNTRANSFER为TRUE,你curl_exec封装了所有的响应作为字符串并将其返回到您所选择的变量。

输出响应,您可能会发现更多信息来帮助您诊断问题。

讨论后添加在评论

这是我们应该做的:

既然你没有通过网络控制,尝试安装和激活Web服务器的虚拟专用服务器上,以便您可以接收和http://localhost/fakeServer.php

一旦你已经安装的Apache2或NGINX处理请求,并对其进行设置,创建了一个小程序,在该网站的根目录下名为fakeServer.php,和API URL设置为http://localhost/fakeServer.php。在该脚本中,每次运行脚本时都要创建一个输出$_POST标题内容的日志。

通过这种方式,您可以证明脚本是否发送请求,以及它们对接收服务器的样子。这将帮助您调试您的脚本以使用API​​类并验证您的代码格式良好且正常运行。

是否有fakeServer.php输出响应并在程序中检查该响应。如果一切运行良好,fakeServer.php的输出将以$response变量结束。

如果一切工作不正常,我们对测试环境有更多的控制权来发现问题。

+0

没有回应。 –

+0

根本没有任何反应表明你的互联网数据包永远不会传送到远程服务器。如果您正在另一台服务器上测试您的代码,并且您的代码已由该服务器验证,那么您必须分解不同的事情。我们可以假设你的PHP是正确的,因为你在requestmaker.com上验证了它。然后考虑一下你的服务器和它所在的网络。有防火墙可以阻止您的出站请求吗?如果是这种情况,那么你的请求将永远不会发挥出来,直到你找到一种通过防火墙的方式。 –

+0

试着想想你的互联网数据包将从创建到销毁的完整路径,并考虑如何与在requestmaker.com创建的互联网数据包不同。 –