我尝试使用POST将数据发送到我的应用程序。 网址有点棘手,它是'仅限https和特定端口
这是我的代码
$url = 'https://mysite.com/foo.php';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
if ($type == "POST") {
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
if ($environment == 'test') {
curl_setopt($curl, CURLOPT_PORT, 1234);
}
$result = curl_exec($curl);
if (curl_errno($curl) > 0) {
$result = 'Internal server error, error: ' . curl_errno($curl);
}
curl_close($curl);
它返回错误7 Failed to connect() to host
。
我做错了什么?
更新:
在bodi0建议之后我添加
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, true);
UPDATE2 :
这是一个网络问题,我的代码还可以......
答案 0 :(得分:2)
尝试设置端口号如下:
curl_setopt($curl, CURLOPT_PORT, 8088);
其中8088是您的真实端口号。
处理SSL请求的正确方法还包括设置CURLOPT_CAINFO
参数:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_CAINFO, getcwd() . "/folder/your-secure-certificate.crt");
这可确保您的cURL
会话不仅可以信任任何服务器证书。
例如,如果攻击者以某种方式将流量从api.example.com
重定向到他们自己的服务器,则此处的cURL
会话将无法正确初始化,因为攻击者无法访问我们添加的CA所信任的服务器证书(即没有私钥)。
修改强>
许多托管公司不允许连接"返回"从您自己的PHP程序到您自己的主机,所以也许这就是这里发生的事情。还尝试应用代理设置,该代理设置在您的LAN中使用并查看是否有效,如有必要,请将其添加到您的代码中:
$proxy = '127.0.0.1:8888';
curl_setopt($curl, CURLOPT_PROXY, $proxy);