Я создал функцию в Google Apps Script, которая хорошо работает, когда я запускаю ее в Google Apps Script.Выходные данные возвращаются в Google Sheets.
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.
Моя единственная гипотеза состоит в том, что кнопка на листе Google добавляет несколько заголовков, User-Agent или content-typeна запрос, который не разрешен в API сервере.И после некоторого поиска, я думаю, я не могу переназначить User-Agent в запросе.Это что-то правильно, или я делаю это неправильно?
РЕДАКТИРОВАТЬ 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
таким же образом, там нет ошибок, но, очевидно, не работает.Похоже, Google не позволяет изменять это значение.
Попробует разные заголовки в почтальоне и, возможно, подтвердит, что этот заголовок является причиной ошибки.Спасибо @ TheMaster
РЕДАКТИРОВАТЬ 2:
Я пробовал разные заголовки через Почтальон.Таким образом, в результате, когда я добавляю в заголовки ключ X-Forwarded-For
с любым значением, он возвращает "message": "An error has occurred."
Когда я не добавляю этот ключ, он работает хорошо.
Итак, вопрос заключается в том, чтобы отключить добавление этого заголовка с помощью скрипта Google Apps.Кажется, что нет.