2

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

但是,如果有例如 404,让我们说

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

手册(响应状态行)建议上面的代码将允许我打电话

$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清楚地捕捉到异常在某种程度上给了我相同的答案,但上述手册页上的其他一些方法也很有用。

我究竟做错了什么?

4

1 回答 1

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 上指出这一点

于 2014-05-07T11:33:31.920 回答