Не удается отправить запрос POST в скрипт Google Apps

Я пытаюсь развернуть скрипт 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?

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

Tanaike 19.07.2019 00:35

Это решило проблему! И сегодня я узнал одну новую вещь: несмотря на то, что curl услужливо говорит «Ненужное использование -X или --request, POST уже выведен», когда я делаю запрос с -XPOST и полезной нагрузкой, его поведение отличается при наличии перенаправлений. -XPOST заставляет все последующие запросы после перенаправления выполняться с использованием POST. С другой стороны, если мы не укажем -XPOST, последующие запросы после первого POST выполняются как запросы GET. Я не знаю, является ли это намеренным поведением, но это определенно неинтуитивно. Спасибо за помощь, Танайке!

Rui Gonçalves 19.07.2019 01:10

Спасибо за ответ. Я рад, что ваша проблема была решена. Когда ваша проблема будет решена, вы можете опубликовать ее как ответ и принять ее? Таким образом, это будет полезно другим пользователям, у которых есть такая же проблема.

Tanaike 19.07.2019 01:15

Сделанный. Спасибо еще раз!

Rui Gonçalves 19.07.2019 01:24

Благодарю за ваш ответ. Я голосую за это.

Tanaike 19.07.2019 01:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
757
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, проблема заключалась в том, что я использовал 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, но это определенно неинтуитивно.

Другие вопросы по теме