在Google脚本中尝试/捕获HTTP响应的最佳方式

Best way to Try/Catch HTTP response in Google Script

本文关键字:响应 HTTP 最佳 方式 捕获 脚本 Google      更新时间:2023-09-26

我还是JavaScript和Google应用程序脚本的新手,这是我第一次尝试使用"Try/Catch"语句。

我正在运行一个连接到页面的脚本。它大部分时间都在连接,但偶尔不会响应并抛出http错误(或者,响应将为空)。如果我得到错误代码,我想尝试/捕捉这个响应,让它再次运行,但我不能100%确定我是否理解语法,因为无论我如何格式化它,它要么从不抛出异常,要么总是抛出异常。

以下是我一直在试验的一些示例代码:

function myFunction() {
  var response =  UrlFetchApp.fetch("google.com"); 
  Logger.log('Response Code: ' + response.getResponseCode());
try {if(response.getResponseCode() === 200);
} catch (err) {
    throw 'Page connected';
}
}

如果我能做到这一点,我相信我能解决剩下的问题。然而,即使日志显示我得到了200的HTTP响应,它也从未抛出错误"Page connected"。

如果有人能指导我:

1) 这是实现我想要的正确方法吗,还是尝试/抓住其他东西?2) 正确的语法。

我将不胜感激。

getResponseCode不会抛出异常,但fetch确实抛出异常,因此请将其包含在try块中:

function myFunction() {
  try {
    var response =  UrlFetchApp.fetch("google.com"); 
    Logger.log('Response Code: ' + response.getResponseCode());
    if(response.getResponseCode() === 200) {
      // something
    }
  } catch (err) {
      // handle the error here
  }
}

从今天起,可以将muteHttpExceptions参数放在UrlFetchApp.fetch(url, options)options中。它使HTTP异常静音。

这样,就不需要try catch了——只需检查响应代码是否正常即可。

您可以使用选项muteHttpExceptions自己处理异常。

根据文件:

muteHttpExceptions:如果为true,那么如果响应代码指示失败,并返回HTTPResponse。默认值为false。

当然,这里是示例代码:

function DoSomething(url)
{
  var options = 
  {
  'muteHttpExceptions' : true
  };
  var response = UrlFetchApp.fetch(url, options);
  if(response.getResponseCode() == 200)
  {
    //Do anything with url data...
    return "Success!!!";
  }
  else
  {
    console.log("Response Code: " + response.getResponseCode());
    console.log("Content Text:'n" + response.getContentText());
    return "Failed :(";
  }
    
}

以下是对我来说很好的方法,无论页面是否正确加载,都会返回HTTP代码:

function getStatusCode(url){
    var options = {
        'followRedirects' : false
    };
    try{
        var response = UrlFetchApp.fetch(url,options);
        return response.getResponseCode();
    } catch (err) {
        // sample error content: "returned code 404."
        var regExp = new RegExp("returned code ([0-9]{3})","gmi"); 
        return regExp.exec(err)[1];
    }
}