3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【GAS】GASにcurlでPOSTしてjsonを送ろうとしたらエラーが出たのでメモ

Posted at

どうも。
今日は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時間ほど悩みましたがなんとか解決。
見てくれてありがとう。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?