☆Yuus Memo☆
非エンジニアの方でも業務を効率化できるプログラムを紹介します!
LINUX

【PHP】cURLの使い方について

皆さんこんにちは!!
今日は、やAPIとのやりとりや、http通信のチェックなどでよく使用される「cURL」の使い方について書いていきたいと思います。

cURLに関する情報は調べると沢山ヒットしますが、情報が古かったり説明が分かりにくいものも多いです。

cURLとは

cURL(カール)は、さまざまなプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供するプロジェクトである。
curlはURLシンタックスを用いてファイルを送信または受信するコマンドラインツールである。

https://ja.wikipedia.org/wiki/CURL

ウィキペディアで調べると上記の情報が得られるかと思います。
難しい言葉を並べてありますが、HTTPリクエストを発行してページの情報を取得したり、linuxコマンドでファイルダウンロードする際に使う位に考えてもらえば大丈夫です。

ヘッダーやパラメーターを操作しやすいので、とても使い勝手が良いです。

基本の書き方

GET

<?php

$url = 'https://example.com';  // リクエストするURL

// 処理開始
$curl = curl_init($url);

// オプションをセット
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // メソッド指定
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 証明書の検証を行わない
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // レスポンスを文字列で受け取る

// レスポンスを変数に入れる
$response = curl_exec($curl);

// 処理を終了
curl_close($curl);

処理を始める、オプションをセット、実行、処理を終了、が基本です。
書き方自体は難しくないんだけど、オプションを調べるのが大変ですよね。。

POST

<?php

$url = 'https://example.com';  // リクエストするURL

// 渡したいパラメータ
$params = [
    'name' => 'YAMADA',
    'age' => 18,
];

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params); // パラメータをセット
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);

分かりやすく、curl_setopt($curl, CURLOPT_POST, TRUE);という書きましたが、
GETと同じ書き方で、curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');でも大丈夫です。

PUT

<?php

$url = 'https://example.com';  // リクエストするURL
$params = [];

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); // メソッドを指定
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params)); //渡すパラメータはhttp_build_query()で変換
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);

POSTでパラメータを渡す場合と似ているのですが、下記要注意です。

渡すパラメータはhttp_build_query()で変換してあげないとダメです。
POSTの場合は単なる配列でもOKなので、PUTの場合、注意して下さい。

DELETE

<?php

$url = 'https://example.com';  // リクエストするURL

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); // メソッドを指定
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);

「DELETE」は簡単ですね。
メソッドを「DELETE」にしてやればOKです。

オプションをまとめる

オプションは配列にまとめる事も出来ます。
可読性が上がるので、纏めれるものはまとめた方が良いです。

<?php

$options = [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $post_params,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_RETURNTRANSFER => true
];

$curl = curl_init($url);
curl_setopt_array($curl, $options);

これで、PHPでAPIを介した「CRUD」操作が可能になるかと思います。

リクエストにヘッダーを追加する

APIキーやトークン等、ヘッダーへ付加したい情報を付けてリクエストしたい場合があるかと思います。
ヘッダーを追加するのも簡単で、次の様に行います。

<?php
// ... 中略 
$api_headers = [
                "Content-Type: application/json; charset=UTF-8",
                'Authorization: Bearer ...'
            ];

curl_setopt($curl, CURLOPT_HTTPHEADER    , $api_headers);
// ...

curl_setoptの【CURLOPT_HTTPHEADER】へ、必要な情報を設定してやるだけです。

まとめ

PHPはライブラリが充実しているので、生のcURLを利用する機会は少ないかもしれませんがPHPを利用するなら、使い方は知っておいた方が良いです。

最近のPHPだと、composerを使って自分のアプリケーションに追加することが出来ます。例えば”guzzle”というライブラリは、cURLをラップしているので簡潔にcURLの処理を書くことができます。

基本をしっかりマスターした後は、色々なライブラリを調べてみると、プログラムの幅が広がり一気にレベルアップできます。
ライブラリの実装コードを読むと、とても勉強になります。

皆さんも楽しく頑張ってプログラミングに励んでください!!


コメントを残す