如何在用guzzle请求远程服务器时处理错误500?

时间:2017-02-27 10:55:14

标签: error-handling guzzle drupal-8

我正在使用以下网址请求网络服务:

 use GuzzleHttp\Client;
 use GuzzleHttp\Exception\ConnectException;
  try {
  $client = new Client();
  $response = $client->request('GET', $url); //it crashes at this line
  $content = json_decode($response->getBody(), true);

}
catch (ConnectException $e) {
  \Drupal::logger('amu_hal')->error('incorrect_url'.$url);
}

今天远程服务器返回错误500.

如何修改我的代码,以免在网站崩溃时崩溃?

1 个答案:

答案 0 :(得分:1)

我认为远程服务器是指需要很长时间才能连接的服务器。您可以为请求指定超时。

或许服务器返回错误500并且在ConnectException期间失败了?您可以检查请求返回的状态代码。

或者甚至代码可能会使您指示的行失败,但异常Exception未被捕获?尝试使用$client = Drupal::httpClient(); $request = $client->get($uri, ['connect_timeout' => 5]); if ($request->getStatusCode() === 200) { echo 'Connection Success'; } else { echo sprintf('Error %d occurred', $request->getStatusCode()); } 作为一个全能来调试这种情况。

我建议您不要直接使用Guzzle,而是使用Drupal包装(在引擎盖下使用Guzzle)。

this.addShipTest1 = function() {
    this.revolutionTime += 0.5;
    this.stopAllShipCSS();
    this.addShip()
}

this.addShipTest2 = function() {
    this.revolutionTime += 0.5;
    this.stopAllShipCSS();

    var save = this;
    setTimeout(function() {
        save.addShip();
    }, 100);
}