异常机制

Saber遵循将业务与错误分离的守则, 当请求任意环节失败时, 默认都将会抛出异常.

强大的是, Saber的异常处理也是多样化的, 且和PHP的原生的异常处理一样完善.

异常的命名空间位于Swlib\Http\Exception

ExceptionIntroscene
RequestException请求失败请求配置错误
ConnectException连接失败如无网络连接, DNS查询失败, 超时等, errno的值等于Linux errno。可使用swoole_strerror将错误码转为错误信息。
TooManyRedirectsException重定向次数超限重定向的次数超过了设定的限制, 抛出的异常将会打印重定向追踪信息
ClientException客户端异常服务器返回了4xx错误码
ServerException服务器异常服务器返回了5xx错误码
BadResponseException未知的获取响应失败服务器无响应或返回了无法识别的错误码

除一般异常方法外, 所有HTTP异常类还拥有以下方法 :

MethodIntro
getRequest获取请求实例
hasResponse是否获得响应
getResponse获取响应实例
getResponseBodySummary获取响应主体的摘要内容

捕获例子

  1. try {
  2. echo SaberGM::get('http://httpbin.org/redirect/10');
  3. } catch (TooManyRedirectsException $e) {
  4. var_dump($e->getCode());
  5. var_dump($e->getMessage());
  6. var_dump($e->hasResponse());
  7. echo $e->getRedirectsTrace();
  8. }
  9. // int(302)
  10. // string(28) "Too many redirects occurred!"
  11. // bool(true)
  12. #0 http://httpbin.org/redirect/10
  13. #1 http://httpbin.org/relative-redirect/9
  14. #2 http://httpbin.org/relative-redirect/8