ブログ

PHPを使ってIoT機器のAPIをPOSTで叩いてレスポンスを得る方法

IoT機器でPHPからPOSTでデータを送ってレスポンスを取得する必要があったため、PHPのcURLについて学習しています。

まずは@wanwanlandsさんのQiitaの記事を読みます。

PHP cURLの色々な使い方 – 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さん、ありがとうございます!

ABOUT ME
中畑 隆拓
スマートライト㈱ 代表取締役。IoTソリューションの開発、スマートホーム&オフィスのコンサルティング、DALI,KNX,EnOceanなどのインテグレーションを行っています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です