3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GAS覚書き】doPostではリクエストヘッダー情報を取得できない

Posted at

初めに

GASを用いてLINE BOTからのリクエストを処理しようと思っていたのですが、リクエストヘッダー情報が取れずリクエストの検証ができませんでした。

doPost()とは

doPost()は、デプロイしたGASに対してPostのリクエストを投げた際、そのリクエストを処理する関数になります。
同様に、GETのリクエストを処理するdoGet()もあります。

/*
 * 引数eにはリクエスト情報が入っている
 */
function doPost(e) {

  // レスポンスで
  return ContentService.createTextOutput(
    JSON.stringify({'content': 'post ok'})
  ).setMimeType(ContentService.MimeType.JSON);
}

リクエスト情報には何が入っているのか

ということで、引数のeに何が入っているのかを見てみようと思います。
eをそのままスプレッドシートに吐き出すようなコードを書いてみました。

function doPost(e) {
  
  // リクエスト情報のeをログ出力してみる
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('log');
  sheet.appendRow([new Date(), JSON.stringify(e)]);


  return ContentService.createTextOutput(
    JSON.stringify({'content': 'post ok'})
  ).setMimeType(ContentService.MimeType.JSON);
}

送るリクエストは以下です。
ヘッダーに付与した値がeに含まれているかどうかを見てみましょう。

image.png

こちらが実際にeに送られてきたデータを整形したものになります。
postData->typeにリクエストヘッダで指定したContent-Typeの値が入ってますが、それ以外の値はとれていません。

{
    "contextPath": "",
    "parameter": {},
    "queryString": "",
    "parameters": {},
    "postData": {
        "contents": "{\n  \"test\": \"ttt\"\n}",
        "length": 19,
        "name": "postData",
        "type": "application/json"
    },
    "contentLength": 19
}

一応公式ドキュメントも見てみる

GASの公式ドキュメントを見ると、eにはヘッダー情報は詰められてなさそうです。

終わりに

ということで、doPostではリクエストヘッダーを取得することはできませんでした。取得したい場合はGASじゃなくGoogle Cloud Functionsなど使うのがべきなんでしょうね。

LINE Bot自体はヘッダー情報がなくても動かすことができますが、本当にLINEからのリクエストかどうかを検証することはできません。Google Cloud FunctionsやLambdaでの実装を検討しようと思います。

もしGAS上で取得できる方法を知っている方いたら教えてください。
ここまでご覧いただきありがとうございました!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?