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

Request for JavaScript works, but not for GoogleScreen. What's the difference?

请帮忙。我找不到错误,也不明白为什么请求不起作用。在我看来,这只是 Google 的 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));

如何正确操作?

在您的 Google Apps 脚本中,数据默认以表单形式发送。当我看到你的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 和访问令牌的值。

添加了 1 个:

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

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 个:

根据您的以下回复,

but the solution doesn't work for me. I saw you added a modified script. You can also test it with the parameter "Bearer ###" Error 403. But it is not in the JavaScript code. I don't understand what's wrong?

我从你的回复中确认了状态码 403。在这种情况下,认为无法从Google端直接访问该站点。 Ref我认为你的问题是因为这个。

但是,对于这种情况,有一个解决方法。在这里,我想建议使用此解决方法。

示例脚本:

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

在此脚本中,使用了自定义函数。因此,请将以下脚本复制并粘贴到 Google 电子表格的 container-bound 脚本中。和 运行 main()。这样,自定义函数上的请求是运行。并且,返回值可以用脚本检索。

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)
}