自动重试

在爬虫项目中, 请求失败自动重试是非常常见的需求, 比如会话过期后重新登录.

Saber内置了此功能, 并可使用拦截器来强化它.

如未设置retry_time而设置了retry拦截器, 则retry_time会置为1, 如retry拦截器的回调方法返回了false, 无论retry_time是多少, 都会在返回false时终止重试.

  1. $uri = 'http://eu.httpbin.org/basic-auth/foo/bar';
  2. $res = SaberGM::get(
  3. $uri, [
  4. 'exception_report' => 0,
  5. 'retry_time' => 3,
  6. 'retry' => function (Saber\Request $request) {
  7. echo "retry...\n";
  8. $request->withBasicAuth('foo', 'bar'); //发现失败后添加验证信息
  9. if ('i don not want to retry again') {
  10. return false; // shutdown
  11. }
  12. }
  13. ]
  14. );
  15. echo $res;