Я хочу отправить HTTP-запрос POST (с данными JSON) в функцию Cloud Run с помощью Apps Script, но я не вижу такой записи в журналах функции Cloud Run. API Apps Script включен в моем проекте GCP, и я также указал номер проекта GCP в настройках проекта.
Роли, связанные с моей учетной записью: Владелец, Разработчик Cloud Run Source, Пользователь сервисной учетной записи, Потребитель использования службы
Роли, связанные со сервисной учетной записью, которую я специально создал для функций Cloud Run: Разработчик облачных функций, Администратор Cloud Run, Создатель токена сервисной учетной записи, Сервисная учетная запись Пользователь
Некоторая информация из моего кода:
appsscript.json:
Код: Выделить всё
...
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/script.container.ui",
"https://www.googleapis.com/auth/cloud-platform",
"openid"
],
...
Код: Выделить всё
var options = {
"method": "post",
"contentType": "application/json",
"payload": jsonData,
"headers": {
"Authorization": "Bearer "+ScriptApp.getIdentityToken() // gcloud auth print-identity-token
}
};
...
// url: Cloud Run Functions URL
var response = UrlFetchApp.fetch(url, options);
Код: Выделить всё
import functions_framework
@functions_framework.http
def http_function(request):
content_type = request.headers["content-type"]
if content_type == "application/json":
try:
request_json = request.get_json(silent=True)
data = request_json
except Exception as e:
return "No JSON data provided", 400
return f"{data}"
Код: Выделить всё
requestКод: Выделить всё
content-typeКод: Выделить всё
responseКод: Выделить всё
{ Date: 'Fri, 04 Apr 2025 09:20:23 GMT', 'Content-Length': '181', 'Content-Type': 'text/html; charset=utf-8', 'Alt-Svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000', 'X-Cloud-Trace-Context': 'e85c4f564777ce1ae6d02cd31da8d566;o=1', Server: 'Google Frontend' }Код: Выделить всё
HTTP Response Code: 500На самом деле, я также пробовал использовать Appscript.GetOAuthToken(), как рекомендовал @TheMaster:
Код: Выделить всё
HTTP Response Code: 401Ошибка: несанкционировано… У вашего клиента нет разрешения на доступ к запрошенному URL
В оболочке gcloud я попробовал следующую «тестовую команду CLI», которую нашел в разделе «Тестовая служба»:
Код: Выделить всё
curl -X POST https://[service URL] -H "Authorization: bearer $(gcloud auth print-identity-token)" -H "Content-Type: application/json" -d '{"name": "Developer"}'Может ли кто-нибудь помочь мне наконец заставить мою функцию принять запрос?
Если я пропустил какую-либо важную информацию, дайте мне знать.
Подробнее здесь: https://stackoverflow.com/questions/795 ... n-function
Мобильная версия