こんにちは、さるまりんです。
前回、file_get_contents()
でPOSTする方法について書かせてもらいました。
今回はcurl
を使った方法です。
curlでPOSTする
curl
を使ってサーバーにデータをPOSTするには以下のようにします。
$url = '送り先URL';
$data = [];
// $dataに送るデータを詰めます。
$data['name'] = 'salumarine';
$data['type'] = 'monkey';
// 送信データをURLエンコード
$data = http_build_query($data, "", "&");
// curlを初期化
$ch = curl_init();
// 設定!
curl_setopt($ch, CURLOPT_URL, $url); // 送り先
curl_setopt($ch, CURLOPT_POST, true); // POSTです
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 送信データ
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 実行結果取得の設定
// 実行!
$output = curl_exec($ch);
// リソースを閉じる
curl_close($ch);
コードを簡単に説明しますね。
$url
は送信先のURLです。$data
の配列に送信するデータを詰めます。
そしてhttp_build_query()
で送信データをURLエンコード。
ここまではfile_get_contents()
を用いた時と同じです。
ここからcurl
を使います。
流れは
curl_init()
で初期化
curl_setopt()
でURLやオプションを設定
curl_exec()
で実行
curl_close()
でリソースを閉じ終了
です。
curl_setopt()
では、順番にCURLOPT_URL
で送信先URLを、CURLOPT_POST
で「POSTします」ということを、CURLOPT_POSTFIELDS
で送信データを。CURLOPT_RETURNTRANSFER
にはtrue
を設定し実行結果を文字列で取得します。
他にもたくさんのオプションがあり、例えばCURLOPT_SSL_VERIFYPEER
にfalse
を設定すると、実行時にcurl
はサーバ証明書の検証を行いません。オレオレ証明書を用いるサーバーへアクセスする際はそのようにします。
たくさんのオプションが存在するのでそちらはぜひ本家のcurl_setopt()
のページを参照してみてください。
curl_setopt()
の代わりにcurl_setopt_array()
で配列を使って複数のオプションを設定することもできます。
上のコードは次のように書くことができます。
$options = [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true];
curl_setopt_array($ch, $options);
たくさん設定するオプションがあるときはこちらの方がシンプルに見えるかな。
file_get_contents()
、curl
、違いは?
file_get_contents()
とcurl
を使う方法はどう違うの?となりますよね。curl
の方は上にもあったようにたくさんの設定をcurl_setopt()
で簡単に指定することができます。タイムアウトのCURLOPT_TIMEOUT
で設定するだけです。細やかなのです。
なので簡単なケースではfile_get_contents()
でいいかと思いますが、curl
を使うことの方が多いように思います。
他にも違いはたくさんあるかもしれないですがこの点が一番大きいかなと。
一つのことをするのにいろんな方法があります。プログラミングって言語や文化なんだなあと思います。そんな大げさなことではないのかもしれないですが。
日々勉強ですね。良い方法や美しい書き方を目指して頑張ります。
おかしなところとかよかったら指摘してもらえると嬉しいです。どうぞよろしくお願いします。
読んでくださってありがとうございます。
ではまた!