我需要使用常规URL编码查询字符串对EC2查询API执行简单的GET请求。协议是HTTPS。如何在PHP的cURL的帮助下发送请求。
答案 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_VERIFYPEER
和CURLOPT_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);