1

myFunction() が doPost によって処理されるペイロードを送信し、ペイロードに基づいてコンテンツを返すようにしたいと考えています。これらのテスト スクリプトは、次のいずれかのインスタンスでのみ機能します。

a) doGet() を使用し、ペイロードを渡すのではなく、期待どおりに返される出力を取得します。

また

b) doPost() を使用し、ペイロードを渡しますが、出力ではなく 405 コードを取得します。

私は何が欠けていますか?

function doPost(e) {
  var ss = SpreadsheetApp.openById('<spreadsheet id for recording parameters>');
  var sheet = ss.getSheets()[0];
  var record;
  for (var i in e.parameters) {
    record = 'parameter: ' + i + ' = ' + e.parameters[i];
    sheet.getRange(sheet.getLastRow() + 1, 1, 1, 1).setValue(record);
  }
  var output = ContentService.createTextOutput();
  output.setContent("content to return");
  return output;
}

function myFunction() {
  var url = '<url of above script webapp, set to anonymous, anyone>';
  var payload = {payloadToSend : 'string to send'};
  var method = 'post'
  var response = UrlFetchApp.fetch(url, {method : method, payload: payload}).getContentText();
  Logger.log(response);
  return;
}
4

1 に答える 1

4

問題は、ContentService コンテンツの提供元であるドメイン「script.googleusercontent.com」が POST メソッドを許可していないことにあるようです。doPost() ハンドラーが TextOuput を返すと、クライアントにリダイレクトが返されます。これにより、クライアントは POST を script.googleusercontent.com に再度送信しますが、これは許可されていません。

GET を使用できる場合は、それが推奨される解決策になります。そうでない場合は、作業を 2 つの部分に分割する必要がある場合があります。最初は応答なしで POST を実行し、次に応答を取得するために GET を実行します。

更新: 2012 年 9 月 21 日現在、この問題は修正されているはずであり、エラーなしで URL に POST できます。

于 2012-08-14T22:03:12.640 に答える