PHP Curl を使用して HTTP 認証を実行する

Subodh Poudel 2023年6月20日
  1. php-curlの紹介
  2. Ubuntu への php-curl ライブラリのインストール
  3. HTML フォームから基本的な HTTP 認証を実行する
  4. cURL を使用して基本的な HTTP 認証を実行する
PHP 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 関数を見てみましょう。

  1. curl_init() - cURL セッションを初期化します。

  2. curl_close() - cURL セッションを閉じます。

  3. curl_setopt(handle, option, value) - cURL セッションのオプションを設定します。 ここで、handlecurl_init() によって返される値です。

    option パラメーターには、さまざまなオプションの値を指定できます。 オプションのリストは こちら にあります。

    必要に応じて使い分けています。 value パラメータには、オプションの値があります。

  4. 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() 関数を使用して、ユーザー名とパスワードが user123password123 に等しいかどうかを確認します。 次の例に示すように、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

出力:

ログインフォーム - html

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

要素の検査

ログインに失敗しましたというメッセージを表示して、間違った資格情報をフォームに送信することで、認証をテストできます。 上の図のように、[リクエスト] タブから間違った資格情報を確認することもできます。

cURL を使用して基本的な HTTP 認証を実行する

上記の cURL メソッドを使用して HTTP 認証を実行できます。 まず、HTTP 要求をサーバーに送信するためのペイロードを作成する必要があります。

たとえば、curl ディレクトリ内に post.php ファイルを作成します。 以下に示すように、PHP ファイルで、配列 $data を作成し、正しいログイン資格情報を保存します。

$data = array(
    "uname" => "user123",
    "pass" => "password123",
    "form" => "submit"
);

次に、変数 ch を作成して cURL セッションを保存します。 chhttp://localhost/curl/login.php という URL を持つ関数 curl_init() を割り当てます。

その後、curl_setopt() 関数を使用して、cURL セッションのさまざまなオプションを設定します。 CURLOPT_FOLLOWLOCATIONCURLOPT_POSTCURLOPT_RETURNTRANSFERTRUE に設定します。

CURLOPT_POSTFIELDS オプションにペイロード $data を指定します。 CURLOPT_COOKIEJAR オプションの場合、Cookie ファイル名 cookie.txt を記述します。

cookie をプロジェクト ディレクトリに保存するには、空の cookie.txt ファイルを作成する必要があります。

  1. http://localhost/curl/login.php は、cURL でリクエストを送信するターゲット URL です。
  2. オプション CURLOPT_FOLLOWLOCATIONTRUE に設定すると、Location: header() によってリダイレクトされる任意のヘッダー位置に従います。
  3. オプション CURLOPT_POSTTRUE に設定すると、サーバーへの POST リクエストであることをセッションに通知します。
  4. オプション CURLOPT_POSTFIELDS は、リクエストで送信されるペイロードを定義します。
  5. オプション CURLOPT_COOKIEJAR は、cURL セッションが閉じられた後、Cookie をファイル cookie.txt に保存します。
  6. オプション CURLOPT_RETURNTRANSFERTRUE に設定すると、直接入力の代わりに 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 スクリプトを実行します。 資格情報がペイロードで正しいため、次の出力が受信されます。

ログインフォーム - curl

間違った資格情報を使用すると、出力にログインに失敗しましたと表示されます。

したがって、このチュートリアルでは、PHP で基本的な cURL 認証を実行する方法を示しました。

著者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

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

関連記事 - PHP Curl