PHP的cURL:如何通过HTTPS连接?
通过curl向HTTPS URL发送请求并不是那么难,就PHP代码而言。
像这样的东西应该做的非常精细(我只是尝试这个代码部分我的机器上,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;
而且它的结果罚款输出:我得到同样的事情在我的浏览器中尝试访问https://
网址;当然,除了CSS之外。
你可能想看看curl_setopt
功能的手册页:有很多的选项,其中一些可能是有用的,在特定情况下:-)
这里,我用CURLOPT_SSL_VERIFYPEER
和CURLOPT_SSL_VERIFYHOST
;不确定你是否需要亚马逊,但我不得不使用它们,否则这部分代码不起作用 - 但这可能与我正在使用的证书是自签名的事实有关。尝试使用和不使用这些,你会很快发现你是否需要它们。
实施例:
$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);
CURLOPT_SSL_VERIFYPEER
检查对方的证书是有效还是无效/过期。
CURLOPT_SSL_VERIFYHOST从php manual引述:
1来检查一个共同 名存在的对等体的SSL证书中。 2到 检查是否存在通用名称 ,并验证它是否与所提供的 主机名匹配。
您能否描述为什么需要SSL_VERIFYPEER和SSL_VERIFYHOST? – 2010-02-21 14:50:28
我编辑了我的答案。 – rogeriopvl 2010-02-21 14:57:41
如果要配置CURL以盲目接受证书,可以将CURLOPT_SSL_VERIFYPEER选项设置为false。
$url = 'https://www.example.com/abc';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Blindly accept the certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
url http:// ...? – Sarfraz 2010-02-21 14:47:12
@Sarfraz> ergh,该死的复制粘贴*(我从我的浏览器中复制粘贴了一个URL,但没有注意到它没有像我以前的服务器那样添加's')* ;;我已经编辑了我的答案以纠正错误;感谢您的评论:-) – 2010-02-21 14:54:25
欢迎您:) – Sarfraz 2010-02-21 14:55:41