2010-02-21 96 views

回答

4

通过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_VERIFYPEERCURLOPT_SSL_VERIFYHOST;不确定你是否需要亚马逊,但我不得不使用它们,否则这部分代码不起作用 - 但这可能与我正在使用的证书是自签名的事实有关。尝试使用和不使用这些,你会很快发现你是否需要它们。

+0

url http:// ...? – Sarfraz 2010-02-21 14:47:12

+0

@Sarfraz> ergh,该死的复制粘贴*(我从我的浏览器中复制粘贴了一个URL,但没有注意到它没有像我以前的服务器那样添加's')* ;;我已经编辑了我的答案以纠正错误;感谢您的评论:-) – 2010-02-21 14:54:25

+0

欢迎您:) – Sarfraz 2010-02-21 14:55:41

12

实施例:

$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_VERIFYHOSTphp manual引述:

1来检查一个共同 名存在的对等体的SSL证书中。 2到 检查是否存在通用名称 ,并验证它是否与所提供的 主机名匹配。

+0

您能否描述为什么需要SSL_VERIFYPEER和SSL_VERIFYHOST? – 2010-02-21 14:50:28

+0

我编辑了我的答案。 – rogeriopvl 2010-02-21 14:57:41

2

如果要配置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); 
1

您也可以使用Zend Framework和cURL适配器来帮助完成此任务。详情here