我想摆脱这个错误。我读了一个similar question,其中一个答案建议我可以使用以下方法禁用验证:
$client->setDefaultOption('verify', false);
我的确切错误是:
未捕获的异常'GuzzleHttp \ Exception \ RequestException',消息'cURL错误60:SSL证书问题:无法在C:\ path \ guzzle \ src \ Handler \中获取本地颁发者证书(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)' CurlFactory.php:187堆栈跟踪:#0 C:\ path \ guzzle \ src \ Handler \ CurlFactory.php(150):GuzzleHttp \ Handler \ CurlFactory :: createRejection(Object(GuzzleHttp \ Handler \ EasyHandle),Array)#1
C:\ path \ guzzle \ src \ Handler \ CurlFactory.php(103):GuzzleHttp \ Handler \ CurlFactory :: finishError(Object(GuzzleHttp \ Handler \ CurlHandler),Object(GuzzleHttp \ Handler \ EasyHandle),Object( GuzzleHttp \ Handler \ CurlFactory))#2
C:\ path \ guzzle \ src \ Handler \ CurlHandler.php(43):GuzzleHttp \ Handler \ CurlFactory :: finish(Object(GuzzleHttp \ Handler \ CurlHandler),Object(GuzzleHttp \ Handler \ EasyHandle),Object( GuzzleHttp \ Hand in C:\ path \ guzzle \ src \ Handler \ CurlFactory.php on the line 187
我阅读了所有这些行的代码,并且没有像$client
这样的变量,但我在CurlFactory.php
中找到了这个函数。请注意,文件CurlFactory.php
不是由我创建的。
public function release(EasyHandle $easy)
{
$resource = $easy->handle;
unset($easy->handle);
if (count($this->handles) >= $this->maxHandles) {
curl_close($resource);
} else {
// Remove all callback functions as they can hold onto references
// and are not cleaned up by curl_reset. Using curl_setopt_array
// does not work for some reason, so removing each one
// individually.
curl_setopt($resource, CURLOPT_HEADERFUNCTION, null);
curl_setopt($resource, CURLOPT_READFUNCTION, null);
curl_setopt($resource, CURLOPT_WRITEFUNCTION, null);
curl_setopt($resource, CURLOPT_PROGRESSFUNCTION, null);
curl_reset($resource);
$this->handles[] = $resource;
}
}
我可以在此处设置禁用验证的选项吗?
我知道禁用验证不是一个好主意,但代码是供个人使用和测试的。如果禁用验证,则没有问题。这是我实际PHP文件中的代码。
require('vendor/autoload.php');
use JonathanTorres\MediumSdk\Medium;
$medium = new Medium('my-key');
$user = $medium->getAuthenticatedUser();
echo 'Authenticated user name is: ' . $user->name;
正如您所看到的,我在任何地方的代码中都没有使用cURL。需要在某个库中设置选项。是否可以在我自己的文件中禁用验证而不是更改库的源代码?
答案 0 :(得分:1)
您可能正在寻找CURLOPT_SSL_VERIFYHOST选项。如果未指定,则此设置默认为选项2,这意味着如果证书名称与连接的服务器名称不匹配,连接将失败。将此值设置为0表示将忽略主机名,并且无论名称不匹配,都将接受证书。 通常这足以解决自签名证书的问题。
选项1是一个遗留选项,以前用于调试但不推荐使用,不应使用。
这也可能是由于curl无法找到根证书捆绑包。您可以download the bundle from the curl site并将其保存到服务器上的某个位置,然后在php.ini中添加对它的引用,如下所示: curl.cainfo = FOLDER_PATH \ cacert.pem
它也可能与Guzzle的版本有关,我发现这是Guzzle versions later than 4的问题。不确定这是否适合您尝试。