使用HTTPS在特定端口上使用Curl POST数据

时间:2014-05-12 12:31:24

标签: php curl

我尝试使用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

这是一个网络问题,我的代码还可以......

1 个答案:

答案 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);