我在 Google Apps Script 中创建了函数,当我在 Google Apps Script 中运行它时效果很好。输出数据返回到 Google 表格。
function testFunction11() {
var rng = SpreadsheetApp.getActiveRange();
var encodedAuthInformation = Utilities.base64Encode("username:key");
var headers = {"Authorization" : "Basic " + encodedAuthInformation};
var params = {
'method': 'GET',
'muteHttpExceptions': true,
'headers': headers
};
var res = UrlFetchApp.fetch("https://api.apiservice.com/api/v1/xxx?fields=somefields", params);
Logger.log(res.getContentText());
rng.setValue(res);
}
单元格中的输出:
[
{
"id": xxx,
"createdDate": "2019-02-01T04:54:00Z",
"reference": "XXX"
},
etc
然后我将脚本分配给按钮“testFunction11”。当我单击按钮时,它会返回
{
"message": "An error has occurred."
}
它看起来像来自 API 服务器的响应。
我唯一的假设是谷歌工作表的按钮添加了一些标题、用户代理或内容类型来请求,这在 API 服务器中是不允许的。经过一番搜索,我想我无法在请求中重新分配用户代理。这是对的还是我做错了?
编辑1:
每个案例的标题console.log(UrlFetchApp.getRequest(url, params))
:单击电子表格中的按钮时:
{headers={Authorization=Basic XXXXXXXXQVU6MWVhODlmZmFkN2U3NGNjOGJkOTc1YTE1ZjVhNTE3MzE=, X-Forwarded-For=178.xx.my.ip}, method=get, payload=, followRedirects=true, validateHttpsCertificates=true, useIntranet=false, contentType=null, url=https://api.apisite.com/api/v1/SalesOrders?fields=Id,Createddate,Reference&where=Createddate%3E2019-02-01T00:00:00Z}
对于脚本:
{headers={Authorization=Basic XXXXXXXXQVU6MWVhODlmZmFkN2U3NGNjOGJkOTc1YTE1ZjVhNTE3MzE=}, method=get, payload=, followRedirects=true, validateHttpsCertificates=true, useIntranet=false, contentType=null, url=https://api.apisite.com/api/v1/SalesOrders?fields=Id,Createddate,Reference&where=Createddate%3E2019-02-01T00:00:00Z}
所以按钮只添加X-Forwarded-For
.
当我尝试手动添加X-Forwarded-For: 'unknown'
时出现这样的错误
There are attribute with impossible value: Header:X-Forwarded-For
俄语中的错误文本,很抱歉可能翻译不准确。这很有趣,因为当我Test: unknown
以同样的方式添加时,没有错误,但显然不起作用。看起来谷歌不允许更改此值。
将在邮递员中尝试不同的标头,并可能确认此标头是错误的原因。谢谢@TheMaster
编辑2:
我通过邮递员尝试了不同的标题。因此,结果是当我添加任何值的标题X-Forwarded-For
键时,它会返回"message": "An error has occurred."
当我不添加此键时,它运行良好。
因此,问题是通过 Google Apps 脚本禁用添加此标头的任何方法。好像没有。