使用Python Requests发送表单数据

2025 年 3 月 6 日 | 阅读 3 分钟

在本教程中,我们将学习如何使用 Python 的 requests 库发送表单数据。

Python Requests 简介

requests 库是一个非常重要且用户友好的 HTTP 库,用于在 Python 中向 Web 服务器发出请求。它简化了发送 HTTP/1.1 请求(如 GET、POST、PUT、DELETE 等)的过程,并能轻松地处理响应。

Requests 库的一些关键特性

  • GET 请求: 从服务器检索数据。
  • POST 请求: 将数据发送到服务器,通常用于提交表单数据。
  • Headers 和 Parameters: 轻松发送自定义标头和 URL 参数。
  • 处理响应: 访问响应的内容、状态码和标头。

Requests 库的一些优点

  1. 易于使用: 语法简单直观。
  2. 功能全面: 支持所有 HTTP 方法(GET、POST、PUT、DELETE)。
  3. 会话管理: 自动处理 cookie 和会话。
  4. 响应处理: 方便处理响应,包括 JSON 解析。
  5. 可定制: 支持自定义标头、代理和身份验证。
  6. 健壮的错误处理: 提供详细的错误消息和异常。

Requests 库的一些缺点

  1. 无内置异步支持: 无法原生处理异步请求(需要 `aiohttp` 等第三方库进行异步处理)。
  2. 对大数据传输有限: 对于非常大的文件上传/下载不是最优的。
  3. 无 WebSocket 支持: 无法处理 WebSocket 连接。
  4. 内存占用较高: 对于大型请求可能会消耗更多内存。

Requests 库的一些应用

  1. 网络爬虫: 从网站提取数据。
  2. API 交互: 与 RESTful API 通信(例如,GET、POST 数据)。
  3. 自动化: 自动化 Web 任务,如表单提交。
  4. 测试: 向端点和服务的发送 HTTP 请求进行测试。
  5. 数据收集: 从 Web 获取数据以进行数据分析。
  6. Web 服务监控: 检查 Web 服务的状态和性能。

使用 Requests 库发送表单数据

要使用 Python 的 requests 库发送表单数据,通常需要使用 `POST` 方法将数据提交给服务器。当与网站上的表单或期望特定格式(如 URL 编码表单数据或 JSON)数据的 API 交互时,这很常见。

分步过程

  • 导入 requests 库:确保已安装 requests 库(pip install requests)并将其导入到脚本中。
  • 准备表单数据:创建一个字典,其键和值对应于表单字段。
  • 发送 POST 请求:使用 `requests.post()` 将表单数据发送到服务器。
  • 处理响应:检查响应状态和内容,以确保表单已成功提交。

示例 1:发送 URL 编码的表单数据

输出

 
```plaintext
Status Code:200
Response Content: {
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "email":"alice@example.com", 
    "message":"Hello, I would like to know more about your services.", 
    "name": "Alice"
  }, 
  "headers": {
    ...
  }, 
  "json": null, 
  ...
}
```   

说明

  • URL:`https://httpbin.org/post` 是一个测试端点,它会回显请求数据。
  • form_data:一个字典,其键与表单字段名称匹配。
  • response.status_code:这将返回 200,表示请求成功。
  • response.text:返回的响应包含发送到服务器的数据,确认它已正确接收。

示例 2:发送 JSON 数据

有时,服务器期望的表单数据是 JSON 格式,而不是传统的 URL 编码表单数据。

代码

输出

 
```plaintext
Status Code:200
Response Content: {
  "args": {}, 
  "data":"{\"name\":\"Bob\",\"email\":\"bob@example.com\",\"message\":\"Could you please provide a quote for your services?\"}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    ...
  }, 
  "json": {
    "email":"bob@example.com", 
    "message":"Could you please provide a quote for your services?", 
    "name":"Bob"
  }, 
  ...
}
```   

说明

  • json_data:一个表示 JSON 格式数据的字典。
  • `json=...` 参数的 `requests.post()`:自动将字典序列化为 JSON,并设置适当的 Content-Type 标头(`application/json`)。
  • response.json():返回响应的已解析 JSON 内容。