这应该是一件很容易做到的事情。我可以找到很多关于如何在 Guzzle 3 中执行此操作的参考,但它们在 Guzzle 5 中不起作用。
到目前为止我在做什么:
$this->client = new GuzzleClient(['defaults' => [
'verify' => 'false'
]]);
当我发送请求时,我收到此错误:
RequestException in RequestException.php line 51:
SSL CA bundle not found: false
我在谷歌上找不到任何对此错误的有用参考。如果我可以访问curl选项,那么我可以尝试类似此处建议的解决方案(适用于Guzzle 3,因此它不起作用):http://inchoo.net/dev-talk/symfony2- guzzle-ssl-self-signed-certificate/,其相关部分是:
$req->getCurlOptions()->set(CURLOPT_SSL_VERIFYHOST, false);
$req->getCurlOptions()->set(CURLOPT_SSL_VERIFYPEER, false);
你应该使用
$this->client = new GuzzleClient(['defaults' => [
'verify' => false
]]);
即布尔值 false,而不是字符串 'false'
文档在这里: https://docs.guzzlephp.org/en/5.3/clients.html#verify
注意:一些人给出了适用于 Guzzle 6+ 的其他答案。如果您使用这些版本,它们是很好的答案(但最初的问题明确是关于 Guzzle 5)。
尝试使用有效的更新版本:
$this->client = new GuzzleClient(['base_uri' => 'https://api.example.com/', 'verify' => false ]);
或更简单的版本:
$this->client = new GuzzleClient(['verify' => false ]);
使用版本 6.2-dev 进行测试。
实际版本是正确的版本:
$this->client = new GuzzleClient(['verify' => false ]);
在 2018 年,这行不通:
$this->client = new GuzzleClient(['defaults' => [
'verify' => false
]]);
您可以在新的 Laravel 客户端版本中使用
$http = new Client(['verify' => false]);
对于使用 Laravel HTTP 客户端的人来说,下面的解决方案对我有用
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Http;
Http::baseUrl('http://example.com')
->setClient(new Client(['verify' => false]))
->get('user/lits.htm',[
'page_no' => '5',
'per_page' => '25',
])
->json();
在 Laravel HTTP 客户端(Laravel 7 及以上版本)上禁用 SSL 验证的更简单方法。
Http::withOptions(['verify' => false])->get($url)->json();