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

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

新規登録して質問してみよう
ただいま回答率
85.50%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Google Apps Script

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3801閲覧

PHPからGAS(Google spread sheet)へのcurl でのPOST送信で400エラーが発生する。

DJ_Wash

総合スコア0

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Google Apps Script

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/09/27 01:00

編集2020/09/27 02:40

前提・実現したいこと

PHPとGAS(google form & Spread sheet)で自動処理を作ってます。

内容は、以下になります。

  1. Google form で問合せ
  2. ”送信ボタン押下”をトリガーとし、Spread sheetに追加された値(問合せ内容)を取得し、POST送信
  3. Xserver の match.php でPOSTを受信し、DBと照合
  4. If yes(照合がture)、そのデータを他のGoogle spread sheetにPOST送信
  5. if not(照合がfalse)、そのデータを2. のSpread sheetにPOST送信

上記の5.(4.は作業前)のPHPから指定のGoogle spread sheetへPOST送信をすると"400 Bad Request"になります。

発生している問題・エラーメッセージ

The requested URL returned error: 400 Bad Request

該当のソースコード

//送信データ整形 $ss_row_num = (string)$data['row_num']; //照合失敗 スプシのそのユーザーの行塗り潰し //POST送信先のスプシURL $ss_url = "https://script.google.com/macros/s/○○○○○○○○○○/exec"; $post_row_num = "{\"rowNum\": \"$ss_row_num\"}"; $json_row = json_decode($post_row_num, true); //GASへスプシの行番号をPOST送信 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ss_url); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_row); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json charset=\"utf-8\"', 'Accept: application/json')); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); curl_exec($ch); //エラー処理 if (curl_errno($ch)) { print "03Error: " . curl_error($ch); } else { curl_close($ch); }

試したこと

Talend API Tester(Google Chromeの拡張機能)を使ってテストPOST送信したところ、GAS側でのPOST受信で
以下のエラーが起きてます。
"スクリプトが完了しましたが、何も返されませんでした。"

また、doPOSTのGAS側のコードは、こちらです。

function doPost(e) { //POST値パース if (typeof e === "undefined"){ //動作を終了する return; } else{ var requestJSON = JSON.parse(e.postData.getDataAsString()); var rowNum = requestJSON.rowNum; //対象のシートを取得 var sheet = SpreadsheetApp.openById("hogehoge").getSheetByName('フォームの回答 1'); sheet.getRange(rowNum, 1, 1, 5).setBackground("gray"); return HtmlService.createHtmlOutput(rowNum); }

補足情報(FW/ツールのバージョンなど)

PHP version: 7.4.4

###この後、すること、やっていること
原因の切り分け

Macのターミナルからcurlを叩いてもエラーは、同様ですが、
GAS側の処理(色付け)は、成功してます。

GAS側に返り値を設定出来れば、エラーを解決できるかと予想し、作業中です。

なにか、他の方法等、お知恵をお貸しいただけますと、幸いです。
何卒、宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

Get 送信したら、いけました!
ありがとうございます!!

投稿2020/09/27 11:09

DJ_Wash

総合スコア0

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

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

0

自己解決

Get 送信したら、いけました!
ありがとうございます!!

投稿2020/09/27 11:04

DJ_Wash

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問