gpt4 book ai didi

php - 将 Curl 客户端 ssl 移动到 Guzzle

转载 作者:可可西里 更新时间:2023-10-31 22:10:54 24 4
gpt4 key购买 nike

我在 php 5.3 和 php 5.5 上使用 Guzzle v3.9.2。

我有以下使用 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。

最佳答案

像这样尝试:

 $client = new Client();
$response = $client->get($url, array(), array('cert' => $cert_file));

并为检查添加这一行:

 $this->assertEquals($cert_file, $request->getCurlOptions()->get(CURLOPT_SSLCERT));

或者使用这个:

 $client = new Client();
$request = $client->createRequest('GET', $url);
$request->getCurlOptions()->set(CURLOPT_SSLCERT, $cert_file);
$response = $client->send($request);

如果您使用自签名证书,请设置此选项:

$request->getCurlOptions()->set(CURLOPT_SSL_VERIFYHOST, false);
$request->getCurlOptions()->set(CURLOPT_SSL_VERIFYPEER, false);

在发送请求之前设置这一行:

$request = $client->get( .... )
.
.
.
$request->setResponse(new Response(200), true);
$request->send();

检查您的网址并像这样输入它:

$url = 'https://example.com/index.php';

并且您可以添加默认选项,例如您的 curl 代码:

$request->getCurlOptions()->set(CURLOPT_RETURNTRANSFER , true);
$request->getCurlOptions()->set(CURLOPT_FOLLOWLOCATION , true);

关于php - 将 Curl 客户端 ssl 移动到 Guzzle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com