PHP基于MySQL实现API登录账号并通过Python发起请求的入门教程

本文将指导你如何使用PHP实现一个简单的API登录功能,并通过Python发送登录请求。我们将详细解释每一步的代码,以确保你能够理解每个部分的作用。

一. PHP实现API登录

步骤1:数据库连接

首先,我们需要连接到数据库以验证用户凭证。

db.php

 1 <?php
 2 $servername = "localhost";
 3 $username = "your_username";
 4 $password = "your_password";
 5 $dbname = "your_dbname";
 6 $conn = new mysqli($servername, $username, $password, $dbname);
 7 if ($conn->connect_error) {
 8     die("连接失败: " . $conn->connect_error);
 9 }
10 ?>

变量解释:

 `$servername`:数据库服务器的地址。

 `$username`、`$password`:数据库的用户名和密码。

 `$dbname`:要连接的数据库名称。

-`$conn`:创建一个到MySQL数据库的新连接。

 `if ($conn->connect_error)`:检查连接是否成功。如果失败,输出错误信息并停止脚本。

步骤2:用户登录处理

接下来,我们创建`login.php`文件来处理用户登录。

login.php

 1 <?php
 2 include 'db.php'; // 引入数据库连接文件
 3 $username = $_POST['username']; // 从POST请求中获取用户名
 4 $password = $_POST['password']; // 从POST请求中获取密码
 5 $username = $conn->real_escape_string($username); // 防止SQL注入
 6 $password = $conn->real_escape_string($password); // 防止SQL注入
 7 $sql = "SELECT id, password FROM users WHERE username = '$username'"; // 创建SQL查询
 8 $result = $conn->query($sql); // 执行SQL查询
 9 if ($result->num_rows > 0) { // 检查是否有匹配的用户名
10     while($row = $result->fetch_assoc()) { // 遍历结果集
11         if ($password === $row["password"]) { // 比较密码
12             $token = bin2hex(random_bytes(64)); // 生成一个安全的随机令牌
13             $userId = $row["id"]; // 获取用户ID
14             $updateSql = "UPDATE users SET token = '$token' WHERE id = $userId"; // 更新用户的令牌
15             $conn->query($updateSql); // 执行更新查询
16             echo json_encode(array("token" => $token)); // 返回令牌
17         } else {
18             echo "密码错误"; // 密码不匹配
19         }
20     }
21 } else {
22     echo "用户名不存在"; // 没有找到匹配的用户名
23 }
24 $conn->close(); // 关闭数据库连接
25 ?>

 

变量解释:

 `include 'db.php'`:引入之前创建的数据库连接文件。

 `$_POST`:用于接收POST请求中的数据。

 `$conn->real_escape_string()`:防止SQL注入攻击。

 `$sql`:构建一个查询语句来检查用户名是否存在。

 `$result = $conn->query($sql)`:执行查询并获取结果集。

 `$result->num_rows`:检查结果集中是否有数据。

 `$row = $result->fetch_assoc()`:遍历结果集,每次获取一行数据。

 `bin2hex(random_bytes(64))`:生成一个安全的随机令牌。

 `json_encode`:将PHP数组转换为JSON格式。

二. Python发起API请求

现在我们有了API端点,我们可以使用Python来发送登录请求。

login_request.py

1 import requests
2 url = 'http://example.com/login.php' # API端点的URL
3 data = {
4     'username': 'myusername', # 要登录的用户名
5     'password': 'mypassword' # 要登录的密码
6 }
7 response = requests.post(url, data=data) # 发送POST请求
8 print(response.json()) # 打印响应的JSON内容

代码解释:

 `import requests`:导入Python的requests库,用于发送HTTP请求。

 `url`:设置API端点的URL。

 `data`:创建一个字典,包含要发送到API的数据。

 `requests.post()`:发送一个POST请求到指定的URL,并附带数据。

 `response.json()`:将响应内容解析为JSON格式。

三. 安全提示

确保使用HTTPS来保护数据传输。

对密码进行哈希处理,并使用`password_hash()`和`password_verify()`。

对所有输入进行验证和清理,以防止SQL注入。

使用更安全的令牌生成机制,如JWT。

设置适当的HTTP头部。

 

posted @ 2024-08-09 08:19  IMwy  阅读(12)  评论(0)    收藏  举报  来源