我最近使用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
相同的答案,但上述手册页中的其他一些方法也很有用。
我做错了什么?
答案 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上指出这一点,以及以下两个方面的荣誉