今回はPHPで外部APIをアクセスする方法を紹介します。
file_get_contents関数でアクセス
file_get_contents関数はファイルの内容を全て文字列に読み込む。
filenameをURLに設定する場合、ウェブサイトのソースの取得を行います。
テストとか使うケースがありますが、実用の場合、curlの方が良いです。
curlでアクセス
PHPで外部のサイトやAPIにアクセスする際に使われる手段としてcurlがあります。
cURLはサイトアクセスだけでなく多くのプロトコルに対応しており、FTP、FTPS、GOPHER、HTTP、HTTPS、LDAP、LDAPS、SCP、SFTP、IMAP、POP3、POP3S、SMTP、SMTPS、RTSPもサポートしています。
curlの流れ
①curl_init初期化
②curl_setoptオプション設定
③curl_exec実行、リクエスト
④curl_closeセッションを閉じる
POSTでアクセス
‘test’ => ‘test’
]
$header = [
// headerに追加したい情報
// 例)
// “Content-Type: application/json”,
// “Accept: application/json”,
// “Authorization: Bearer HogeHoge”
];
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL, ‘https://domain.com’);
curl_setopt($curl,CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE); // 証明書の検証を無効化
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE); // 証明書の検証を無効化
curl_setopt($curl,CURLOPT_RETURNTRANSFER, TRUE); // 返り値を文字列に変更
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, TRUE); // Locationヘッダを追跡
$output= curl_exec($curl);
// エラーハンドリング用
$errno = curl_errno($curl);
// コネクションを閉じる
curl_close($curl);
// エラーハンドリング
if ($errno !== CURLE_OK) {
//エラー処理
}
echo output;
GETでアクセス
// headerに追加したい情報
// 例)
// “Content-Type: application/json”,
// “Accept: application/json”,
// “Authorization: Bearer HogeHoge”
];
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL, ‘http://domain.com?test=test’);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, ‘GET’);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE); // 証明書の検証を無効化
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE); // 証明書の検証を無効化
curl_setopt($curl,CURLOPT_RETURNTRANSFER, TRUE); // 返り値を文字列に変更
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, TRUE); // Locationヘッダを追跡
$output= curl_exec($curl);
// エラーハンドリング用
$errno = curl_errno($curl);
// コネクションを閉じる
curl_close($curl);
// エラーハンドリング
if ($errno !== CURLE_OK) {
//エラー処理
}
echo output;
curl共通関数作成
function curl_request($url, $type=false, $params=[],&$errno,&$errmsg) {
// curl_init()初期化
$ch=curl_init($url);
// curl_setopt()オプション設定
if ($type) {
//true の場合:post デフォルト:get
curl_setopt($ch,CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
// 証明書の検証を無効化
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
// 返り値を文字列に変更
curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
// curl_exec()リクエスト
$res = curl_exec($ch);
if (!$res) {
$errmsg = curl_error($ch);
$errno= curl_errno($ch);
}
// curl_close()セッションクローズ
curl_close($ch);
return $res;
}