【发布时间】:2014-11-13 11:19:18
【问题描述】:
我将 Guzzle v3.9.2 与 php 5.3 和 php 5.5 一起使用。
我有以下使用 ssl 客户端证书的工作 curl 代码:
$url = "https://example.com/";
$cert_file = '/path/to/certificate.pem';
$ch = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_URL => $url ,
CURLOPT_SSLCERT => $cert_file ,
);
curl_setopt_array($ch , $options);
$output = curl_exec($ch);
if (!$output) {
echo "Curl Error : " . curl_error($ch);
}
else {
echo htmlentities($output);
}
我已尝试将其移至 Guzzle:
require '/var/www/vendor/autoload.php';
use Guzzle\Http\Client;
$client = new Client();
$request = $client->get($url, array('cert' => $cert_file));
$response = $client->send($request);
echo $response . PHP_EOL;
print 'HI' . PHP_EOL;
当我使用 curl 运行它时,我得到 200 响应。当我使用 Guzzle 时,我得到了 403。
【问题讨论】:
-
cert选项仅适用于客户端证书。如果您使用的是私有证书,那么 curl 会给您无法设置私有密钥文件的错误。请参考下面我的回答