Qiita慣れていないため、見にくい所あったらすみません…。
・Laravel 5.3
・Guzzle 6.2
GuzzleHttpのClientを使ってとあるフロントサーバにアクセスに行く際に、開発中はレスポンスが返ってきてたのに、テストになるとなぜかエラーが出てしまってレスポンスが返って来なくなったので、メモ。
原因
結論から言うと、テストではフロントサーバに自己証明書を使ったSSLを導入していたため、でした。
どうやらGuzzleHttpのClientがcURLを叩く際に証明書の検証をしているらしく、自己証明だからダメっす、と言われていたようです。
解決策
やりたかったのは至極単純で、
$client = new GuzzleHttp\Client(['base_uri' => 'https://' . なんかドメイン . '/']);
$response = $client->request('get', '/check');
こんな感じなんですが、動かすと
cURL error 60: Peer's certificate issuer has been marked as not trusted by the user. (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
Laravelログにこんなのが出てました。
で、調べてみるとClientがcURLを叩く際に証明書の検証はデフォルトではそれがオンになっているらしい。それをオフにすることで、無事にレスポンスが返って来るようになりました。
$response = $client->request('get', '/check', ['verify' => false]);
テストで確認出来たら、コミットする時に外すの忘れないようにしないと…。
参考
▼本家ドキュメント
http://docs.guzzlephp.org/en/latest/request-options.html#verify