本文介绍如何在 Ubuntu 中使用 PHP cURL 执行 HTTP 身份验证。
php-curl 简介
cURL(客户端 URL)是一个命令行实用程序,用于发送或接收数据和文件。 它使用 URL 语法,支持 FTP、FTPS、DICT、HTTP、HTTPS 等协议。
cURL 库在 PHP 中可用,称为 php-curl。 我们可以使用这个库通过在 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 创建登录表单。
将名称属性写为 uname 并传递给用户名和密码,如下例所示。
代码示例:
<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 会话。 将带有 URL http://localhost/curl/login.php 的函数 curl_init()
分配给 ch。
之后,使用 curl_setopt()
函数为 cURL 会话设置各种选项。 将 CURLOPT_FOLLOWLOCATION、CURLOPT_POST 和 CURLOPT_RETURNTRANSFER 设置为 TRUE。
为 CURLOPT_POSTFIELDS
选项提供负载 $data。 对于 CURLOPT_COOKIEJAR
选项,写入 cookie 文件名 cookie.txt。
我们必须创建一个空的 cookie.txt 文件以将 cookie 存储在项目目录中。
- http://localhost/curl/login.php 是我们使用 cURL 发送请求的目标 URL。
-
选项
CURLOPT_FOLLOWLOCATION
设置为 TRUE 跟随由 Location: header() 重定向的任何标头位置。 -
选项
CURLOPT_POST
设置为 TRUE 通知会话这是对服务器的 POST 请求。 -
选项
CURLOPT_POSTFIELDS
定义了请求中发送的负载。 -
在 cURL 会话关闭后,选项
CURLOPT_COOKIEJAR
将 cookie 保存到文件 cookie.txt 中。 - 选项 CURLOPT_RETURNTRANSFER 设置为 TRUE 返回 curl_exec() 的响应而不是直接输入。
最后编写以ch为参数的函数 curl_exec()
执行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
身份验证。