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