Я создал функцию в 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.
Моя единственная гипотеза заключается в том, что кнопка листа Google добавляет некоторые заголовки, User-Agent или тип содержимого для запроса, что не разрешено на сервере 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:
Я пробовал разные заголовки через Postman. Итак, когда я добавляю в заголовки X-Forwarded-For
ключ с любым значением, он возвращает "message": "An error has occurred."
. Когда я не добавляю этот ключ, он работает хорошо.
Итак, вопрос в том, как отключить добавление этого заголовка через Google Apps Script. Вроде нет.
console.log(UrlFetchApp.getRequest(url, params))
- person TheMaster   schedule 10.02.2019{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}
- person imnotyourguru   schedule 10.02.2019X-Forwarded-For
заголовок вашего IP-адреса? И это приводит к сбою вашего API? - person TheMaster   schedule 10.02.2019X-Forwarded-For: 'unknown'
- person TheMaster   schedule 10.02.2019There are attribute with impossible value: Header:X-Forwarded-For
На самом деле этот текст ошибки написан на русском языке, извините за, возможно, неточный перевод - person imnotyourguru   schedule 10.02.2019Test: unknown
таким же образом, ошибок нет, но явно не работает. Похоже, Google не позволяет изменить это значение. - person imnotyourguru   schedule 10.02.2019