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

时间:2010-02-21 14:40:41

标签: php

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

5 个答案:

答案 0 :(得分:15)

示例:

$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到   检查是否存在通用名称   并验证它是否匹配   提供主机名。

答案 1 :(得分:4)

在PHP代码方面,通过curl向HTTPS发送请求本身并不难。

这样的事情应该做得非常好(我只是在我的机器,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;不确定你是否需要那些亚马逊,但我不得不使用它们,否则这部分代码不起作用 - 但这可能与我正在使用的证书是自签名的事实有关...尝试使用和不使用它们,您将很快发现是否需要它们。

答案 2 :(得分: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);

答案 3 :(得分:1)

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

答案 4 :(得分:0)

此代码可用于检索https请求

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,'https://serverurl.com/');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$data1 = curl_exec($ch);
curl_close($ch);
相关问题