捕获异常时使用Guzzle的isSuccessful方法

时间:2014-05-04 23:27:33

标签: php guzzle

我最近使用Guzzle来抓取一个URL,这在没有错误的情况下工作正常。

如果有例如404,那么就说

$response = $client->get('http://www.google.com/test')->send();

手册(Response Status Line)建议上面的代码允许我拨打

$response->isSuccessful();

但是send()在收到请求时出错时会抛出ClientErrorResponseException。引发的异常如下

Guzzle\Http\Exception\ClientErrorResponseException
Client error response
  [status code] 404
  [reason phrase] Not Found
  [url] http://www.google.com/test

因此,捕获该异常显然会阻止我的应用程序暂停,但这意味着我没有可以调用各种isX方法的响应对象。

在某种程度上,明确地捕获异常会给出与isSuccessful相同的答案,但上述手册页中的其他一些方法也很有用。

我做错了什么?

1 个答案:

答案 0 :(得分:5)

您可以指定['exceptions' => FALSE]作为请求选项。看到 https://github.com/guzzle/guzzle/blob/master/docs/clients.rst#exceptions

或者,当您捕获异常时,您仍然可以获得响应:

catch (\GuzzleHttp\Exception\ClientException $e) {
  $response = $e->getResponse();
}

http://guzzle3.readthedocs.org/http-client/client.html#exceptions

在Github上指出这一点,以及以下两个方面的荣誉