PHP Curl を使用して HTTP 認証を実行する
-
php-curlの紹介 -
Ubuntu への
php-curlライブラリのインストール - HTML フォームから基本的な HTTP 認証を実行する
-
cURLを使用して基本的な HTTP 認証を実行する
このチュートリアルでは、Ubuntu で PHP cURL を使用して HTTP 認証を実行する方法を示します。
php-curlの紹介
cURL (クライアント URL) は、データとファイルを送受信するコマンド ライン ユーティリティです。 URL 構文を使用し、FTP、FTPS、DICT、HTTP、HTTPS などのプロトコルをサポートします。
cURL ライブラリは、php-curl と呼ばれる PHP で利用できます。 このライブラリを使用して、PHP で HTTP リクエストを送信することにより、サーバーと通信できます。
Cookie の設定、プロキシの使用、SSL 接続を介したデータの受け渡し、さらには php-curl を使用した認証など、さまざまなタスクを実行できます。
基本的な php-curl 関数を見てみましょう。
-
curl_init()-cURLセッションを初期化します。 -
curl_close()-cURLセッションを閉じます。 -
curl_setopt(handle, option, value)-cURLセッションのオプションを設定します。 ここで、handleはcurl_init()によって返される値です。optionパラメーターには、さまざまなオプションの値を指定できます。 オプションのリストは こちら にあります。必要に応じて使い分けています。
valueパラメータには、オプションの値があります。 -
curl_exec()- 定義済みのcURLセッションを実行します。
Ubuntu への php-curl ライブラリのインストール
認証を実行する前に、php-curl がシステムにインストールされているかどうかを確認する必要があります。 次のコマンドでそれを行うことができます。
php -m
このコマンドは、コンパイルされた PHP モジュールを一覧表示します。 リストに curl がある場合は、php-curl がインストールされていることを意味します。
phpinfo() 関数の出力をチェックして、そのインストールを確認することもできます。 インストールされている場合、curl のテーブルが出力に表示されます。
php-curl がインストールされていない場合は、次のコマンドでインストールできます。
sudo apt-get install php-curl
インストール後、php.ini ファイルを開き、以下の行を見つけます。
;extension=curl
以下のように上記の行のコメントを外します。
extension=curl
最後の手順は、これらのコマンドのいずれかを使用してサーバーを再起動することです。
sudo systemctl start apache2
sudo /etc/init.d/apache2 start
HTML フォームから基本的な HTTP 認証を実行する
まず、HTTP POST メソッドのみを使用して基本認証を実行します。 ユーザー名とパスワードを受け入れる HTML ログインフォームを作成します。
事前定義された一連のログイン資格情報を使用して、ユーザー入力を確認します。 次に、cURL メソッドを使用して HTTP 認証を実行します。
たとえば、/var/www/html にディレクトリ curl を作成し、次にファイル login.php を作成します。 PHP ファイルで、HTML を使用してログイン フォームを作成します。
以下の例に示すように、ユーザー名とパスワードの name 属性を uname および pass として記述します。
コード例:
<form action="login.php" method="post">
<input type="text" placeholder="Enter Username" name="uname" required><br>
<input type="password" placeholder="Enter Password" name="pass" required><br>
<button type="submit" >Login</button>
</form>
次に、PHP タグを開き、isset() 関数を使用して、ユーザー名とパスワードが user123 と password123 に等しいかどうかを確認します。 次の例に示すように、if 条件を使用して、それに応じてメッセージを表示します。
if(isset($_POST['uname'])&& isset($_POST['pass']))
if($_POST['uname']=='user123' && $_POST['pass']=='password123'){
echo "login successful";
}
else{
echo "login failed";
}
ここで、サーバーからファイルを開き、次のようにログイン資格情報を入力します。
username=user123
password=password123
出力:

以下に示すように、Inspect ElementオプションのNetworkタブで HTTP リクエストを確認できます。

ログインに失敗しましたというメッセージを表示して、間違った資格情報をフォームに送信することで、認証をテストできます。 上の図のように、[リクエスト] タブから間違った資格情報を確認することもできます。
cURL を使用して基本的な HTTP 認証を実行する
上記の cURL メソッドを使用して HTTP 認証を実行できます。 まず、HTTP 要求をサーバーに送信するためのペイロードを作成する必要があります。
たとえば、curl ディレクトリ内に post.php ファイルを作成します。 以下に示すように、PHP ファイルで、配列 $data を作成し、正しいログイン資格情報を保存します。
$data = array(
"uname" => "user123",
"pass" => "password123",
"form" => "submit"
);
次に、変数 ch を作成して cURL セッションを保存します。 ch に http://localhost/curl/login.php という URL を持つ関数 curl_init() を割り当てます。
その後、curl_setopt() 関数を使用して、cURL セッションのさまざまなオプションを設定します。 CURLOPT_FOLLOWLOCATION、CURLOPT_POST、CURLOPT_RETURNTRANSFER を TRUE に設定します。
CURLOPT_POSTFIELDS オプションにペイロード $data を指定します。 CURLOPT_COOKIEJAR オプションの場合、Cookie ファイル名 cookie.txt を記述します。
cookie をプロジェクト ディレクトリに保存するには、空の cookie.txt ファイルを作成する必要があります。
http://localhost/curl/login.phpは、cURLでリクエストを送信するターゲット URL です。- オプション
CURLOPT_FOLLOWLOCATIONをTRUEに設定すると、Location: header()によってリダイレクトされる任意のヘッダー位置に従います。 - オプション
CURLOPT_POSTをTRUEに設定すると、サーバーへのPOSTリクエストであることをセッションに通知します。 - オプション
CURLOPT_POSTFIELDSは、リクエストで送信されるペイロードを定義します。 - オプション
CURLOPT_COOKIEJARは、cURLセッションが閉じられた後、Cookie をファイルcookie.txtに保存します。 - オプション
CURLOPT_RETURNTRANSFERをTRUEに設定すると、直接入力の代わりにcurl_exec()の応答が返されます。
最後に、関数 curl_exec() に ch をパラメーターとして記述し、cURL セッションを実行して curl_close() でセッションを閉じます。 最後に、出力 curl_exec() 関数を表示します。
コード例:
$ch = curl_init('http://localhost/curl/login.php');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
次に、post.php スクリプトを実行します。 資格情報がペイロードで正しいため、次の出力が受信されます。

間違った資格情報を使用すると、出力にログインに失敗しましたと表示されます。
したがって、このチュートリアルでは、PHP で基本的な cURL 認証を実行する方法を示しました。
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn