【问题标题】:Can't handle exception with try/catch无法使用 try/catch 处理异常
【发布时间】:2017-03-04 20:19:25
【问题描述】:

我正在使用Goutte(它使用Guzzle)来提取内容,我的脚本以错误结束,尽管我在 try/catch 中运行:

Error: Client error: `GET http://example.com/C42C9CA3` resulted in a `403 Forbidden` response:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "htt (truncated...)

这就是我所拥有的:

use Goutte\Client;
$HTTPconfig = [ "curl" => [
                  CURLOPT_TIMEOUT => 60,
                  CURLOPT_CONNECTTIMEOUT => 60,
                  CURLOPT_SSL_VERIFYPEER => false,
                ],
                ['http_errors' => false]
              ];
$HTTPclient = new \Goutte\Client;
$HTTPclient->setClient(new \GuzzleHttp\Client($HTTPconfig));
$HTTPclient->setHeader('user-agent', 'Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/20.0');

try {
  $crawler = $HTTPclient->request('GET', $url);
  $doc = $crawler->html();
} catch (Exception $e) {
  write($e->getMessage());
  continue;
}

【问题讨论】:

  • 所以输出不是来自write($e-&gt;getMessage());
  • @JonStirling 不,我稍后添加了 try/catch,但它仍然以该错误结束。
  • 绝对是这段代码造成的?我看不出这会失败并停止执行的原因。
  • 是的,这很奇怪,但就是这样。 http://shop.lenovo.com/us/en/itemdetails/06P4069/460/0E80436C80A748E6AA76791FC42C9CA3 是网址。
  • 无法使用提供的代码和 URL 进行复制。

标签: php symfony guzzle goutte


【解决方案1】:

尝试:

  } catch (\Exception $e) {

代替:

  } catch (Exception $e) {

编辑:

如果您使用的是 PHP-7,您可以尝试使用斜线来捕获 Throwable,如下所示:

  } catch (\Throwable $e) {

希望有帮助

【讨论】:

  • 是的 - 特别是如果你已经 namespace'd 你正在处理的文件。(从你的例子中不清楚。)
  • 刚试过,还是一样!一个错误的 URL 可能就是这样一个障碍啊!
  • 是的,我正在使用 PHP7。也试过了,没有运气。 :( 不敢相信我就因为这个而被困在这里。不应该使用 Goutte。
【解决方案2】:

删除['http_errors' =&gt; false] 选项。默认为true,结果为4xx/5xx响应码异常。

【讨论】:

  • 试过了,还是一样。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2018-06-24
相关资源
最近更新 更多