PHP的cURL:如何通过HTTPS连接?

Kin*_*opa 7 php

我需要使用常规URL编码的查询字符串对EC2 Query API执行简单的GET请求.协议是HTTPS.如何在PHP的cURL的帮助下发送请求.

rog*_*pvl 17

例:

$url = "https://example.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);

$result = curl_exec($ch);
curl_close($ch);

print_r($result);
Run Code Online (Sandbox Code Playgroud)

CURLOPT_SSL_VERIFYPEER

检查对等证书是否有效或无效/已过期.

来自php手册的CURLOPT_SSL_VERIFYHOST引用:

1检查SSL对等证书中是否存在公用名.2检查是否存在公用名,并验证它是否与提供的主机名匹配.


Pas*_*TIN 4

就 PHP 代码而言,通过curl 向HTTPS URL 发送请求本身并不困难。

像这样的事情应该做得很好(我刚刚在我的机器、Windows、PHP 5.3 上尝试了这部分代码)

$url = 'https://.../...';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);

echo $data;
Run Code Online (Sandbox Code Playgroud)

它输出的结果很好:与我尝试访问 URL 时在浏览器中得到的结果相同https://;当然,CSS 除外。


您可能想查看该curl_setopt函数的手册页:有很多选项,其中一些在您的具体情况下可能有用:-)

在这里,我使用了CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST; 不确定你是否需要亚马逊的那些,但我必须使用它们,否则这部分代码不起作用——但这可能与我使用的证书是自签名的事实有关......尝试使用和不使用它们,您很快就会知道是否需要它们。