Google Apps ScriptはGETリクエスト、POSTリクエストを受け取るとそれぞれdoGet()
, doPost()
が走ります。このときHtmlService
やContentService
などのObjectでレスポンスを返すことができます。
いつもリクエスト投げっぱなしだったのですが、ちゃんとレスポンスを返すようにした方がWebAppっぽいので以下のような感じで試しにjsonを返すことにしました。
return ContentService.createTextOutput(res).setMimeType(ContentService.MimeType.JSON);
試しに送ってみると何やらエラーを吐いているので調べてみると、どうも"Moved Temporarily"というHTMLが返ってきていて、302リダイレクトが返されているらしい。
ググるとGASは常にそういう振る舞いらしいのでドキュメントを見てみます。
For security reasons, content returned by the Content service isn't served from
script.google.com
, but instead redirected to a one-time URL atscript.googleusercontent.com
. This means that if you use the Content service to return data to another application, you must ensure that the HTTP client is configured to follow redirects. For example, in the cURL command line utility, add the flag-L
. Check the documentation for your HTTP client for more information on how to enable this behavior. Content Service | Apps Script | Google Developers
セキュリティ上の理由でワンタイムURLにリダイレクトさせてるので使ってるHTTP clientでリダイレクトをfollowしてねとのこと。
Node.jsのrequestモジュールだとfollowRedirect
はデフォルトでtrueだったがfollowAllRedirects
のほうにnon-GET HTTP 3xx responsesとあるのでPOSTリクエストの場合はこっちっぽい。リダイレクトを有効にしたところ、正常に値を受け取ることができました。