注意:これは備忘録です。
Qiitaで、POSTとGETの受信パラメータの確認の仕方を調べたら、
- スプレッドシートに書き出すとか
- HTMLページに表示するとか
出てきたので、びっくりした。
僕の記憶していたものは、もっと簡単な方法だったので、備忘録として書いておきます。
なぜ備忘録なのかというと、全ての環境に使えるかどうかわからないからです。
少なくとも、僕の環境では、出来る、しかし、先人たちが書いた難しい方法を使わないとダメな時もあるかもしれない。そういうことで、これは自分用の備忘録として公開します。
試してみる価値はある、とてもシンプルなコード。
POST&GET受信側
ポイントは、以下3つです。
- PostでもGetでも、受信した「e」を、JSON文字列して、Logger.logで見ています。
- Getなら、e.parameterに、javascriptオブジェクトで値が格納されています。
- Postなら、e.postData.contentsに、JSON文字列形式で値が格納されています。これは、送信側でJSON文字列で送信されてくるため。
そこに気を付けてコードを書くと、シンプルなコードは以下となります。
function doGet(e) {
Logger.log('メソッド: GET');
Logger.log(`引き渡されたものをJSON文字列化したe:\n${JSON.stringify(e)}`);
Logger.log(`引き渡されたものをJSON文字列化したe.parameter:\n${JSON.stringify(e.parameter)}`);
}
function doPost(e) {
Logger.log('メソッド: POST');
Logger.log(`引き渡されたものをJSON文字列化したe:\n${JSON.stringify(e)}`);
Logger.log(`引き渡されたものをJSON文字列化したe.postData.contents:\n${JSON.stringify(e.postData.contents)}`);
const contents = JSON.parse(e.postData.contents);//パースする。
Logger.log(`JSON文字列化した、パース後contents: ${JSON.stringify(contents)}`);
}
POST&GET送信側
送信側のコードも参考につけておきます。
// 受信側デプロイ後のウェブアプリURLを設定
const fetchUrl = '[受信側デプロイ後のウェブアプリURL]';
function fetchGet() {
//DriveApp.getRootFolder().getName(); //ウェブアプリ実行時に401エラーが出た場合はこれを実行すると良さそう
//ウェブアプリを全体公開出来ない場合はトークンが必要。下の行のコメントアウトをはずし、トークンをfetch直前に取得
//const token = ScriptApp.getOAuthToken();
// Optionsを設定します
const options = {
'method' : 'get',
'contentType': 'application/json'
//,'headers': {'Authorization': `Bearer ${token}`} //ウェブアプリを全体公開出来ない場合この認証が必要なので、コメントアウトをはずす。
};
//送りたいデータをここで設定。
let name = 'Bob Smith';
let age = 35;
let hobby = '他人のソースコードのダメ出し。// : ? . % a';
name = encodeURIComponent(name);
age = encodeURIComponent(age);
hobby = encodeURIComponent(hobby);
res = UrlFetchApp.fetch(fetchUrl + '?name=' + name + '&age=' + age + '&hobby=' + hobby, options); // <- GET リクエスト
}
function fetchPost() {
//DriveApp.getRootFolder().getName(); //ウェブアプリ実行時に401エラーが出た場合はこれを実行すると良さそう
//ウェブアプリを全体公開出来ない場合はトークンが必要。下の行のコメントアウトをはずし、トークンをfetch直前に取得
//const token = ScriptApp.getOAuthToken();
//送りたいデータをここで設定。
const data = {
'name': 'Bob Smith',
'age': 35,
'hobby' : '他人のソースコードのダメ出し。// : ? . % a'
};
// Optionsを設定します
const options = {
'method' : 'post',
'headers': {
'Content-Type': 'application/json'
//,'Authorization': `Bearer ${token}` //ウェブアプリを全体公開出来ない場合この認証が必要なので、コメントアウトをはずす。
},
'payload' : JSON.stringify(data) //送りたいデータをpayloadに配置してJSON形式変換。
};
res = UrlFetchApp.fetch(fetchUrl,options); // <- Post リクエスト
}