IoT機器でPHPからPOSTでデータを送ってレスポンスを取得する必要があったため、PHPのcURLについて学習しています。
まずは@wanwanlandsさんのQiitaの記事を読みます。
基本
$url = "https://www.yahoo.co.jp/"; $ch = curl_init(); // はじめ //オプション curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html = curl_exec($ch); var_dump($html); curl_close($ch); //終了
こちらは、Qiitaで紹介されているyahoo.co.jpのサイトをcurlで取得し、var_dump出力する方法です。
ただし、現在では”yahoo.co.jp”のURLは、”http”ではなく、”https”にする必要があります。
このプログラムの流れとしては、
curl_init()で初期設定
curl_setoptで、curlのオプションを設定
curl_execで実行
curl_close($ch)で終了処理
となっていました。
ということで、curlの基本を学ぶことができました。
headerを使ってPOSTで送信
今回、私がやろうとしているのは、POSTでheaderとbodyを送信するので、引き続き、@wanwanlandsさんのQiitaの記事を確認し、紹介されていたPOSTを使ったデータ送信と、headerの送信方法を組み合わせて試してみます。
PHPはこのようにしました。
//送信URL
$url = URL;
//postするデータの配列 bodyの部分
$post_data = array(
"paramA" => "aaaa",
"paramB" => "bbbb"
);
// ここからcurlを始める
$ch = curl_init(); // はじめ
// postオプション
curl_setopt($ch,CURLOPT_POST, true);
//データの配列を設定する ここがbody
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
// Header 送信
$headers = array(
"Content-Type" => "application/x-www-form-urlecoded"
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//ヘッダー追加オプション
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$html = curl_exec($ch);
$html = mb_convert_encoding($html,"UTF-8","EUC-JP");
echo $html;
curl_close($ch); //終了
これでheaderとbodyのあるデータをPOSTで送り、レスポンスを得ることができます。
まとめ
PHPで組む前は一生懸命POSTMANをつかってやってましたが、これで楽にAPIたたけそうです。
@wanwanlandsさん、ありがとうございます!