javascript - 请求 JavaScript 有效,但不适用于 GoogleScreen。有什么不同?

请帮忙。我找不到错误,我不明白为什么请求不起作用。在我看来,这只是谷歌的 IP 被我请求的网站阻止了。 JavaScript 的相同请求有效。

function pleaseWork() {
    
      var myHeaders = {
        'contentType': 'application/json',
        'Authorization': 'Bearer 5cd4ac65-f71b-3eaa-93af-78610a7aa320',    
      }
      var raw = ["1111111111111"]
      
      var requestOptions = {
        'method': 'POST',
        'headers': myHeaders,
        'payload': JSON.stringify(raw) 
      };
      result = UrlFetchApp.fetch("https://www.ukrposhta.ua/status-tracking/0.0.1/statuses/last", requestOptions)
      Logger.log(result)
      
    }

工作 Javascript 请求:

var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer 5cd4ac65-f71b-3eaa-93af-78610a7aa320");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify([
  "1111111111111"
]);

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,  
};

fetch("https://www.ukrposhta.ua/status-tracking/0.0.1/statuses/last", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

怎么做才对?

回答1

在您的 Google Apps Script 中,数据默认以表单形式发送。当我看到你的 Javascript 时,似乎需要将数据作为 application/json 的数据发送。因此,您需要按如下方式修改脚本。

从:

var requestOptions = {
  'method': 'POST',
  'headers': myHeaders,
  'payload': JSON.stringify(raw) 
};

至:

var requestOptions = {
  'method': 'POST',
  'headers': myHeaders,
  'payload': JSON.stringify(raw),
  'contentType': 'application/json',
};

参考:

笔记:

  • 我认为这个修改和你的Javascript的请求是一样的。但是,如果发生错误,请再次确认您的 raw 的 values 和您的访问令牌。

添加1:

您的显示脚本已被修改以进行测试。请设置您的访问令牌和 raw 的 value 并再次测试。

function modified_pleaseWork() {
  var myHeaders = { 'Authorization': 'Bearer ###' };
  var raw = ["1111111111111"];
  var requestOptions = {
    'method': 'POST',
    'headers': myHeaders,
    'payload': JSON.stringify(raw),
    'contentType': 'application/json',
  };
  var result = UrlFetchApp.fetch("https://www.ukrposhta.ua/status-tracking/0.0.1/statuses/last", requestOptions);
  Logger.log(result.getContentText())
}

添加2:

从您的以下回复中,

但该解决方案对我不起作用。我看到你添加了一个修改过的脚本。你也可以用参数“Bearer ###”错误403来测试它。但它不在JavaScript代码中。不明白怎么回事?

我从您的回复中确认了状态代码 403。在这种情况下,认为无法从 Google 端直接访问该站点。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403 我认为您的问题的原因是由于这个。

但是,在这种情况下,有一种解决方法。在这里,我想建议使用此解决方法。 https://stackoverflow.com/a/72210231/7108653

示例脚本:

在这种情况下,请求在自定义函数上运行。通过这个,我认为状态码 403 可能可以避免。实际上,当我使用您提供的访问令牌测试此脚本时,可以获得结果 value。

在此脚本中,使用了自定义函数。因此,请将以下脚本复制并粘贴到 Google 电子表格的容器绑定脚本中。并运行 main()。这样,请求就会在自定义函数上运行。而且,返回的 value 可以用脚本检索。

function modified_pleaseWork() {
  var myHeaders = { 'Authorization': 'Bearer 5cd4ac65-f71b-3eaa-93af-78610a7aa320' };
  var raw = ["1111111111111"];
  var requestOptions = {
    'method': 'POST',
    'headers': myHeaders,
    'payload': JSON.stringify(raw),
    'contentType': 'application/json',
  };
  var result = UrlFetchApp.fetch("https://www.ukrposhta.ua/status-tracking/0.0.1/statuses/last", requestOptions);
  return result.getContentText();
}

// Please run this function.
function main() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getRange("A1");
  range.setFormula("=modified_pleaseWork()");
  SpreadsheetApp.flush();
  const value = range.getValue();
  range.clearContent();
  console.log(value)
}

相似文章

flutter - 如何在 TabsIcon 中使用 SVG?

我正在制作我的第一个Flutter应用程序,我有一个问题。我有一个底部导航栏,其中包含来自flutter的图标。但我想在底部导航栏中使用SVG图标。我怎样才能做到这一点?我到目前为止的代码:class...

随机推荐

最新文章