Я пытаюсь развернуть скрипт Google Apps как веб-приложение, но, хотя у меня нет проблем с выполнением запросов GET, у меня возникают проблемы с запросами POST.
Мой код очень прост:
function doGet(request) {
var result = JSON.stringify({ data: 'Thanks, I received the GET request' });
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
function doPost(request) {
var result = JSON.stringify({ data: 'Thanks, I received the POST request' });
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
Я развернул веб-приложение с параметрами «Выполнить приложение как: я» и «Кто имеет доступ к приложению: любой, даже анонимный». Каждый раз, когда я делаю какое-то изменение, я повторно развертываю его с новой версией («Версия проекта: новая»).
После публикации мой запрос curl GET работает отлично:
> curl -L https://script.google.com/macros/s/$SCRIPT_ID/exec
{"data":"Thanks, I received the GET request"}
Однако мой POST-запрос (curl -L -XPOST https://script.google.com/macros/s/$SCRIPT_ID/exec) просто показывает мне стандартную HTML-страницу Google с надписью «Извините, в настоящее время не удается открыть файл. Пожалуйста, проверьте адрес и повторите попытку».
Я попытался отправить некоторые данные и указать тип контента, но ничего не изменилось. Я также пытался изменить тип вывода на просто ContentService.createTextOutput("OK"), но это тоже не сработало. Любопытно, что удаление doPost изменяет сообщение об ошибке на «Функция сценария не найдена: doPost», как и ожидалось. Если это имеет значение, этот сценарий прикреплен к электронной таблице Google.
Есть ли какие-либо специальные разрешения, которые мне нужно предоставить сценарию для запросов POST?
Это решило проблему! И сегодня я узнал одну новую вещь: несмотря на то, что curl услужливо говорит «Ненужное использование -X или --request, POST уже выведен», когда я делаю запрос с -XPOST и полезной нагрузкой, его поведение отличается при наличии перенаправлений. -XPOST заставляет все последующие запросы после перенаправления выполняться с использованием POST. С другой стороны, если мы не укажем -XPOST, последующие запросы после первого POST выполняются как запросы GET. Я не знаю, является ли это намеренным поведением, но это определенно неинтуитивно. Спасибо за помощь, Танайке!
Спасибо за ответ. Я рад, что ваша проблема была решена. Когда ваша проблема будет решена, вы можете опубликовать ее как ответ и принять ее? Таким образом, это будет полезно другим пользователям, у которых есть такая же проблема.
Сделанный. Спасибо еще раз!
Благодарю за ваш ответ. Я голосую за это.





Похоже, проблема заключалась в том, что я использовал curl, в тонких различиях между использованием -XPOST и его неиспользованием. Как предложил Танайке, переход от:
curl -L -XPOST https://script.google.com/macros/s/$SCRIPT_ID/exec
к
curl -L -d '' https://script.google.com/macros/s/$SCRIPT_ID/exec
Решил проблему. Несмотря на то, что curl услужливо сообщает «Ненужное использование -X или --request, POST уже выведен», когда я делаю запрос с -XPOST и полезной нагрузкой, его поведение отличается при наличии перенаправлений. -XPOST заставляет все последующие запросы после перенаправления выполняться с использованием POST в качестве метода. С другой стороны, если я не укажу -XPOST, запросы после первого POST выполняются как запросы GET. Я не знаю, является ли это предполагаемым поведением curl, но это определенно неинтуитивно.
В случае использования метода POST для веб-приложений, когда команда curl используется с
-XPOST, возникает такая ошибка. В этом случае метод POST запускается с использованием-d ""вместо-XPOST. А именно, пожалуйста, протестируйтеcurl -L -d "" https://script.google.com/macros/s/$SCRIPT_ID/exec. Тело запроса одинаково для-XPOSTи-d "". Но результат другой. Если это не решило вашу проблему. Я извиняюсь.