PHP

Guzzle で curl のエラーコードを取得する

More than 1 year has passed since last update.

結論

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 というエラーコードが返されていることがわかる。

「ドメインの名前解決に失敗したときだけ、別の処理をしたい」などといった、特定のシチュエーションにおいてこのエラーコードを取得したいことがある。

例外のメッセージをパースする力技で取得することもできるが、冒頭の結論に書いてある方法を使うことによって正式な?手続きで取得することができる。