自动重试
在爬虫项目中, 请求失败自动重试是非常常见的需求, 比如会话过期后重新登录.
而Saber
内置了此功能, 并可使用拦截器
来强化它.
如未设置retry_time
而设置了retry
拦截器, 则retry_time
会置为1, 如retry
拦截器的回调方法返回了false
, 无论retry_time
是多少, 都会在返回false
时终止重试.
$uri = 'http://eu.httpbin.org/basic-auth/foo/bar';
$res = SaberGM::get(
$uri, [
'exception_report' => 0,
'retry_time' => 3,
'retry' => function (Saber\Request $request) {
echo "retry...\n";
$request->withBasicAuth('foo', 'bar'); //发现失败后添加验证信息
if ('i don not want to retry again') {
return false; // shutdown
}
}
]
);
echo $res;