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