最近尝试搞Composer开发,开发包的时候用到了GuzzleHttp。
在公司电脑访问一切正常的代码,回到家里始终无法成功。
家里笔记本是Windows10 + PHPStudy一键包 + php7.0。
GuzzleHttp入门文档获取错误的方法并不可用:
try {
$client->request('GET', 'https://github.com/_abc_123_404');
} catch (ClientException $e) {
echo $e->getRequest();
echo $e->getResponse();
}
捕获GuzzleHttp错误应该使用如下代码:
// 发起请求
try {
$response = $this->httpClient->post($url, $data);
} catch (RequestException $e) {
$this->err_code = 401;
$this->err_message = $e->getMessage();
return false;
}
得到错误代码如下:
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
大致意思是无法获取到本地的根证书进行验证。
外网找到如下解决方案
https://stackoverflow.com/questions/29822686/curl-error-60-ssl-certificate-unable-to-get-local-issuer-certificate
整理下来大概是这样的:
- 下载最新的根证书文件:https://curl.haxx.se/ca/cacert.pem
- 修改php.ini文件,curl.cainfo = xxx\cacert.pem 文件路径为刚才下载的文件路径
- 重启nginx即可生效.
给大石头点个赞,windows下面有这个问题
linux 不会有
如果是虚拟主机,没得法修改php.ini咋个整呢
https://www.php.net/manual/zh/function.curl-setopt.php
可以通过 curl_setopt($ch, CURLOPT_CAINFO, '/path/ca.pem');