質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

10791閲覧

HTTPリクエストのヘッダに含まれる値取得し、その値をヘッダに含めてレスポンスを返したい

andysumi

総合スコア10

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2018/03/18 07:03

前提・実現したいこと

Asanaというプロジェクト管理ツールのAPIを使ってWebhookを作成したいのですが、
doPost(e)で受け取ったリクエストのヘッダを取得する方法が分からず、
サンプルコード3段落目の Handshake response sent by example.com に該当する処理に難航しています。
アドバイスをいただけるとありがたいです。よろしくお願いします。
APIドキュメント

サンプルコード

# Request curl -H "Authorization: Bearer <personal_access_token>" \ -X POST https://app.asana.com/api/1.0/webhooks \ -d "resource=8675309" \ -d "target=https://example.com/receive-webhook/7654" # Handshake sent to https://example.com/ POST /receive-webhook/7654 X-Hook-Secret: b537207f20cbfa02357cf448134da559e8bd39d61597dcd5631b8012eae53e81 # Handshake response sent by example.com HTTP/1.1 200 X-Hook-Secret: b537207f20cbfa02357cf448134da559e8bd39d61597dcd5631b8012eae53e81 # Response HTTP/1.1 201 { "data": { "id": 43214, "resource": { "id": 8675309, "name": "Bugs" }, "target": "https://example.com/receive-webhook/7654", "active": false, "last_success_at": null, "last_failure_at": null, "last_failure_content": null } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

サンプルのコードをGASに焼き直す、ということでしたらdoPost(e)ではなくUrlFethcApp.fetch({ターゲットURL}, {パラメータオブジェクト})getHeaders()もしくはgetAllHeaders()すれば良いと思います。

[補足(コメントまとめ)]
なお、doPost()のパラメータオブジェクトにHeader情報を直接取得できるプロパティはないと思います。
(少なくともリファレンスではそのような記述を見つけることはできませんでした)
別途調べたところ、ChatWorkでは類似の問題(doPostでのヘッダー情報取得)への対応をしたばかりです。

そのため先日ChatWork側で、HTTP HeaderだけではなくQueryStringにも署名を追加するように変更を行いました。

arguments全走査でも当該データが存在しない場合(e以外、arguments[1]~が存在しない、もしくは存在するが当該データが含まれていない)、Asana側がChatWorkと同様の対応をしない限り**「GASのみで構築する」ことは不可**ということになりますね。

[参考]

投稿2018/03/18 08:23

編集2018/03/20 02:02
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

andysumi

2018/03/18 08:57 編集

ご回答ありがとうございます。 以下のような流れになると理解しておりますので、doPostで処理する必要があると考えております。 認識が誤っているようでしたら、ご指摘いただけると有り難いです。 1. リクエストをAsanaに送信(サンプルコードの1段落目) 2. targetに指定したURLにAsanaからリクエストが送信される(サンプルコードの2段落目) -> ヘッダに含まれる `X-Hook-Secret` を取得 3. 再度Asanaにリクエストを送信(サンプルコードの3段落目) -> ↑で取得した `X-Hook-Secret` をヘッダに設定
退会済みユーザー

退会済みユーザー

2018/03/18 14:28 編集

ちなみにですが、doPost()をPOST送信するメソッドと勘違いされている、ということはありませんよね?
andysumi

2018/03/18 23:01

はい、doPost()については理解しております。 上記、2.のAsanaからのリクエストをdoPost()で受け取り、その際にヘッダ情報も取得しようと考えておりました。
退会済みユーザー

退会済みユーザー

2018/03/19 00:27

了解いたしました。 では、POSTデータを正常に受け取ることができた、という前提で以下を参考に、ひとまず「e.parameters」を確認してみてください。 なお、doPost()のパラメータオブジェクトにHeader情報を直接取得できるプロパティはないと思います。 (少なくともリファレンスではそのような記述を見つけることはできませんでした) 故に力技としては「e」を含むarguments[]を全走査してオブジェクトの内容を確認してみる、という手もあります。 https://developers.google.com/apps-script/guides/web
andysumi

2018/03/20 00:56

e.parametersの他、eの内容を確認しましたが、必要なX-Hook-Secretは含まれておりませんでした。 「doPost()のパラメータオブジェクトにHeader情報を直接取得できるプロパティはない」とのことですので、GASで実現することは出来ないようですね。 アドバイスありがとうございました。
退会済みユーザー

退会済みユーザー

2018/03/20 01:49

別途調べたところ、ChatWorkでは類似の問題(doPostでのヘッダー情報取得)への対応をしたばかりです。 arguments全走査でも当該データが存在しない場合(e以外、arguments[1]~が存在しない、もしくは存在するが当該データが含まれていない)、Asana側がChatWorkと同様の対応をしない限り「GASのみで構築する」ことは不可ということになりますね。 後ほど回答に補足しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問