PHPで外部APIをアクセスする

phpでAPIをアクセスする PHP

今回は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でアクセス

$params= [
‘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 = [
// 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;
}

タイトルとURLをコピーしました