guzzle 和 windows 上的 ssl 证书问题
ssl certificate problem on guzzle and windows
我收到以下错误
GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:186
Stack trace:
#0 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(149): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array)
#1 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(102): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory))
#2 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\CurlHandler.php(43): GuzzleHttp\Handler\CurlFactory::finish(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory))
#3 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\Proxy.php(28): GuzzleHttp\Handler\CurlHandler->__invoke(Object(GuzzleHttp\Psr7\Request), Array)
#4 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\Proxy.php(51): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}(Object(GuzzleHttp\Psr7\Request), Array)
#5 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\PrepareBodyMiddleware.php(37): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}(Object(GuzzleHttp\Psr7\Request), Array)
#6 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Middleware.php(30): GuzzleHttp\PrepareBodyMiddleware->__invoke(Object(GuzzleHttp\Psr7\Request), Array)
#7 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\RedirectMiddleware.php(70): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Request), Array)
#8 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\RedirectMiddleware.php(107): GuzzleHttp\RedirectMiddleware->__invoke(Object(GuzzleHttp\Psr7\Request), Array)
#9 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\RedirectMiddleware.php(72): GuzzleHttp\RedirectMiddleware->checkRedirect(Object(GuzzleHttp\Psr7\Request), Array, Object(GuzzleHttp\Psr7\Response))
#10 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\FulfilledPromise.php(39): GuzzleHttp\RedirectMiddleware->GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response))
#11 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\TaskQueue.php(47): GuzzleHttp\Promise\FulfilledPromise::GuzzleHttp\Promise\{closure}()
#12 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(246): GuzzleHttp\Promise\TaskQueue->run(true)
#13 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(223): GuzzleHttp\Promise\Promise->invokeWaitFn()
#14 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(267): GuzzleHttp\Promise\Promise->waitIfPending()
#15 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(225): GuzzleHttp\Promise\Promise->invokeWaitList()
#16 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending()
#17 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Client.php(131): GuzzleHttp\Promise\Promise->wait()
#18 C:\Users\Administrator\Documents\app\hypervote1.8.php(864): GuzzleHttp\Client->request('GET', 'http://www.inst...', Array)
#19 C:\Users\Administrator\Documents\app\hypervote1.8.php(230): isValidProxy('http://148.251....', Object(League\CLImate\CLImate))
#20 C:\Users\Administrator\Documents\app\hypervote1.8.php(18): run(Object(InstagramAPI\Instagram), Object(League\CLImate\CLImate))
#21 {main}
而 运行 代码:
$client = new GuzzleHttp\Client();
$res = $client->request("GET", "http://www.google.com", ["timeout" => 60, "proxy" => $proxy]);
$code = $res->getStatusCode();
$is_connected = true;
我该如何解决这个问题?
运行 php -i | grep php.ini
查看你的 php.ini 配置文件在哪里。
前往https://curl.haxx.se/ca/cacert.pem下载最新证书。
将 curl.cainfo="/path/to/where/you/saved/cacert.pem"
添加到您的 php.ini 文件。
重新启动 php/services/whatever 然后重试。
如果上述步骤无法解决问题,那么您访问的网站可能正在使用自定义 SSL 证书,因此请尝试从您的浏览器下载证书,并从中创建一个 pem 文件并使用 ['verify' => '/path/to/where/you/saved/your.pem']
作为 Guzzle 客户端选项对其进行测试。
注意,在执行上述选项之前总是better/ideal联系站点所有者进行验证。出于安全原因。
我收到以下错误
GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:186
Stack trace:
#0 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(149): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array)
#1 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(102): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory))
#2 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\CurlHandler.php(43): GuzzleHttp\Handler\CurlFactory::finish(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory))
#3 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\Proxy.php(28): GuzzleHttp\Handler\CurlHandler->__invoke(Object(GuzzleHttp\Psr7\Request), Array)
#4 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Handler\Proxy.php(51): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}(Object(GuzzleHttp\Psr7\Request), Array)
#5 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\PrepareBodyMiddleware.php(37): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}(Object(GuzzleHttp\Psr7\Request), Array)
#6 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Middleware.php(30): GuzzleHttp\PrepareBodyMiddleware->__invoke(Object(GuzzleHttp\Psr7\Request), Array)
#7 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\RedirectMiddleware.php(70): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Request), Array)
#8 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\RedirectMiddleware.php(107): GuzzleHttp\RedirectMiddleware->__invoke(Object(GuzzleHttp\Psr7\Request), Array)
#9 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\RedirectMiddleware.php(72): GuzzleHttp\RedirectMiddleware->checkRedirect(Object(GuzzleHttp\Psr7\Request), Array, Object(GuzzleHttp\Psr7\Response))
#10 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\FulfilledPromise.php(39): GuzzleHttp\RedirectMiddleware->GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response))
#11 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\TaskQueue.php(47): GuzzleHttp\Promise\FulfilledPromise::GuzzleHttp\Promise\{closure}()
#12 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(246): GuzzleHttp\Promise\TaskQueue->run(true)
#13 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(223): GuzzleHttp\Promise\Promise->invokeWaitFn()
#14 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(267): GuzzleHttp\Promise\Promise->waitIfPending()
#15 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(225): GuzzleHttp\Promise\Promise->invokeWaitList()
#16 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\promises\src\Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending()
#17 C:\Users\Administrator\Documents\app\vendor\guzzlehttp\guzzle\src\Client.php(131): GuzzleHttp\Promise\Promise->wait()
#18 C:\Users\Administrator\Documents\app\hypervote1.8.php(864): GuzzleHttp\Client->request('GET', 'http://www.inst...', Array)
#19 C:\Users\Administrator\Documents\app\hypervote1.8.php(230): isValidProxy('http://148.251....', Object(League\CLImate\CLImate))
#20 C:\Users\Administrator\Documents\app\hypervote1.8.php(18): run(Object(InstagramAPI\Instagram), Object(League\CLImate\CLImate))
#21 {main}
而 运行 代码:
$client = new GuzzleHttp\Client();
$res = $client->request("GET", "http://www.google.com", ["timeout" => 60, "proxy" => $proxy]);
$code = $res->getStatusCode();
$is_connected = true;
我该如何解决这个问题?
运行
php -i | grep php.ini
查看你的 php.ini 配置文件在哪里。前往https://curl.haxx.se/ca/cacert.pem下载最新证书。
将
curl.cainfo="/path/to/where/you/saved/cacert.pem"
添加到您的 php.ini 文件。重新启动 php/services/whatever 然后重试。
如果上述步骤无法解决问题,那么您访问的网站可能正在使用自定义 SSL 证书,因此请尝试从您的浏览器下载证书,并从中创建一个 pem 文件并使用 ['verify' => '/path/to/where/you/saved/your.pem']
作为 Guzzle 客户端选项对其进行测试。
注意,在执行上述选项之前总是better/ideal联系站点所有者进行验证。出于安全原因。