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