結論
try {
// 名前解決に失敗するドメイン
// ※エラーコードは CURLE_COULDNT_RESOLVE_HOST (6)
$c->get('http://domaindoesnotexist.co.jp');
} catch (\GuzzleHttp\Exception\ConnectException $e) {
echo $e->getHandlerContext()['errno'];
}
実行結果
6
補足
HTTP クライアントである Guzzle は内部で PHP 組み込みの curl を利用している。
通常、Guzzle を用いた際に curl でエラーが発生したときは GuzzleHttp\Exception\ConnectException
が投げられ、エラーの内容はメッセージに入る。
ドメインを名前解決できないとき
GuzzleHttp\Exception\ConnectException with message 'cURL error 6: Couldn't resolve host 'domaindoesnotexist.co.jp' (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)'
一方で、curl にはエラーコードが存在する。
上記の例でも、ドメインの名前解決に失敗した祭には 6 というエラーコードが返されていることがわかる。
「ドメインの名前解決に失敗したときだけ、別の処理をしたい」などといった、特定のシチュエーションにおいてこのエラーコードを取得したいことがある。
例外のメッセージをパースする力技で取得することもできるが、冒頭の結論に書いてある方法を使うことによって正式な?手続きで取得することができる。