【发布时间】:2010-02-21 14:40:40
【问题描述】:
我需要使用常规 URL 编码查询字符串向 EC2 查询 API 发出简单的 GET 请求。协议是 HTTPS。我将如何在 PHP 的 cURL 的帮助下发送请求。
【问题讨论】:
标签: php
我需要使用常规 URL 编码查询字符串向 EC2 查询 API 发出简单的 GET 请求。协议是 HTTPS。我将如何在 PHP 的 cURL 的帮助下发送请求。
【问题讨论】:
标签: php
例子:
$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到 检查是否存在通用名称 并验证它是否匹配 提供主机名。
【讨论】:
就 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;
它输出结果很好:当我尝试访问 https:// URL 时,我在浏览器中得到了同样的结果;当然,CSS 除外。
您可能想查看curl_setopt 函数的手册页:有很多选项,其中一些可能对您的特定情况有用:-)
在这里,我使用了 CURLOPT_SSL_VERIFYPEER 和 CURLOPT_SSL_VERIFYHOST ;不确定你是否需要亚马逊的那些,但我不得不使用它们,否则这部分代码不起作用——但这可能与我使用的证书是自签名的事实有关......尝试使用和不使用它们,您会很快发现是否需要它们。
【讨论】:
如果您想将 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);
【讨论】:
您还可以使用 Zend Framework 和 cURL 适配器来帮助完成这项任务。详情here
【讨论】:
此代码可用于检索 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);
【讨论】: