どうも。
今日はGASにPOSTでjson送ろうとしたらエラーが出てそれにはまってしまったのでメモ。
ソース
main.php
$url = "GASのりんく";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $senddata_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, 'GASのリンク');
$result = curl_exec($ch);
var_dump($result);
var_dump(curl_error($ch));
curl_close($ch);
phpで書かれた案内フォームの内容をjsonに変換しようとしたのだがresultがずっとFALSE。
原因を探る
var_dump(curl_error($ch));
これを書くことによって何がダメだったのかを出すことができます。
結果このようなエラーが出てきました。
string(63) "SSL certificate problem: unable to get local issuer certificate"
要はHTTPS通信しようとしたのにCA認証に使う証明書がないと言っている。
解決方法
①証明書の検証を行わない
以下の構文を書くことで検証を行わず、エラーが起きることを防止できます。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
俺σ(゚∀゚ )オレ証明書対策もできるらしいですが詳細は省かせていただきます。
証明書を導入する
https://curl.se/ より最新の証明書をダウンロードします。
そこからダウンロードしたcacert.pemを適当な場所において以下の通りに記述します。
php.ini
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
;curl.cainfo =
;curl.cainfo= の部分がコメントアウトされていますがそれを外し、証明書の絶対パスを記入します。
おわり
これで解決すると思われます。
このエラーで5時間ほど悩みましたがなんとか解決。
見てくれてありがとう。