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さん、ありがとうございます!