文章目录

Python 网络请求:requests 发送 GET/POST 请求

发布于 2026-04-11 21:27:10 · 浏览 7 次 · 评论 0 条

Python 网络请求:requests 发送 GET/POST 请求

在 Python 自动化任务中,与网站服务器进行数据交互是必不可少的一环。requests 库因其简洁强大的 API,成为处理 HTTP 请求的首选工具。本文将直接演示如何使用 requests 库发送 GET 和 POST 请求,处理参数、Headers 以及响应数据。


准备工作

在使用前,需确保已安装 requests 库。

  1. 打开终端或命令行工具。
  2. 输入以下命令并执行,完成安装:
pip install requests

发送 GET 请求

GET 请求通常用于从服务器获取数据。

1. 基础请求

向指定 URL 发送请求并获取响应内容。

  1. 引入 requests 模块。
  2. 定义目标 URL 变量,例如 https://httpbin.org/get
  3. 调用 requests.get() 方法传入 URL。
  4. 打印服务器返回的状态码和文本内容。
import requests

url = 'https://httpbin.org/get'
response = requests.get(url)

# 查看状态码,200 表示成功
print(f"状态码: {response.status_code}")

# 查看响应内容的文本形式
print(f"响应内容: {response.text}")

2. 携带参数发送请求

当 URL 需要携带查询参数(如 ?name=value)时,推荐使用 params 参数,库会自动处理编码。

  1. 准备一个包含参数键值对的字典。
  2. 调用 requests.get() 时,将字典赋值给 params 参数。
import requests

url = 'https://httpbin.org/get'
payload = {'key1': 'value1', 'key2': 'value2'}

# 发送带参数的 GET 请求
response = requests.get(url, params=payload)

# 打印实际请求的 URL(requests 自动拼接了参数)
print(f"实际请求 URL: {response.url}")

3. 添加请求头

某些网站为了防止被爬虫访问,会检查请求头中的 User-Agent

  1. 构造一个包含头部信息的字典。
  2. 调用 requests.get() 时,将字典赋值给 headers 参数。
import requests

url = 'https://httpbin.org/get'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

response = requests.get(url, headers=headers)
print(response.text)

发送 POST 请求

POST 请求通常用于向服务器提交数据,如表单提交或上传文件。

1. 发送表单数据

模拟 HTML 表单提交,数据会被编码为 application/x-www-form-urlencoded 格式。

  1. 准备表单数据字典。
  2. 调用 requests.post() 方法,将字典赋值给 data 参数。
import requests

url = 'https://httpbin.org/post'
form_data = {'username': 'admin', 'password': '123456'}

response = requests.post(url, data=form_data)

# 打印服务器返回的表单数据部分
print(response.text)

2. 发送 JSON 数据

在前后端分离的 API 交互中,通常使用 JSON 格式传输数据。

  1. 准备 Python 字典数据。
  2. 调用 requests.post() 方法,将字典赋值给 json 参数。requests 会自动将其序列化为 JSON 字符串并添加正确的 Content-Type 头。
import requests

url = 'https://httpbin.org/post'
json_data = {'id': 100, 'content': '这是一条测试数据'}

response = requests.post(url, json=json_data)

# 打印响应的 JSON 数据
print(response.json())

响应处理与进阶技巧

获取响应后,通常需要提取特定信息或处理异常情况。

1. 解析 JSON 响应

大多数现代 API 返回的都是 JSON 格式。

  1. 确认响应成功(状态码为 200)。
  2. 调用 response.json() 方法,将 JSON 字符串转为 Python 字典。
import requests

url = 'https://httpbin.org/get'
response = requests.get(url)

if response.status_code == 200:
    # 直接解析为字典
    data = response.json()
    print(data['headers']['Host'])
else:
    print("请求失败")

2. 设置超时与异常处理

网络请求可能会因为连接问题而挂起,必须设置超时时间。

  1. 设置 timeout 参数,单位为秒。可以是连接时间与读取时间的元组,也可以是单一数值。
  2. 使用 try-except 捕获可能发生的异常。
import requests
from requests.exceptions import RequestException

url = 'https://httpbin.org/delay/5' # 该接口会延迟 5 秒返回

try:
    # 设置超时时间为 3 秒,超过则抛出异常
    response = requests.get(url, timeout=3)
    print("请求成功")
except RequestException as e:
    print(f"发生错误: {e}")

为了更直观地理解请求处理流程,以下展示了从发起请求到处理响应的逻辑路径:

graph TD A[开始] --> B{请求类型} B -- GET --> C[构建 URL 与 Params] B -- POST --> D{数据类型} C --> E[添加 Headers] D -- 表单 --> F[构建 data 字典] D -- JSON --> G[构建 json 字典] F --> E G --> E E --> H[设置 Timeout 并发送] H --> I{请求是否成功} I -- 是 --> J[解析 JSON 或 Text] I -- 否 --> K[捕获异常] J --> L[结束] K --> L

常用属性对比

以下列出了 Response 对象中最常用的属性和方法,方便查阅。

属性/方法 描述 返回类型
response.status_code HTTP 状态码(如 200, 404, 500) int
response.text 响应内容的字符串形式(自动解码) str
response.content 响应内容的二进制形式(字节) bytes
response.json() 将 JSON 响应内容解析为 Python 字典 dict/list
response.headers 服务器返回的响应头信息 dict
response.cookies 服务器返回的 Cookie 信息 RequestsCookieJar

实战演练:模拟登录查询

假设有一个需要登录才能查看数据的网站,我们将演示完整的登录与查询流程。

  1. 定义登录接口 URL 和查询数据接口 URL。
  2. 构造登录所需的 POST 数据(用户名密码)。
  3. 使用 Session 对象保持会话(自动处理 Cookie)。
  4. 发起登录请求。
  5. 验证登录成功后,使用同一 Session 发起数据查询请求。
import requests

# 使用 Session 可以在多个请求之间保持 Cookie
session = requests.Session()

login_url = 'https://httpbin.org/post'
data_url = 'https://httpbin.org/cookies'

# 1. 模拟登录
login_data = {'username': 'user', 'password': 'pass'}
headers = {'User-Agent': 'My-Agent/1.0'}

# 发送登录请求
session.post(login_url, data=login_data, headers=headers)

# 2. 设置 Session 的 Cookie(模拟登录成功服务器返回的 Cookie)
session.cookies.set('login_session', 'abc123xyz')

# 3. 携带登录状态访问需要权限的接口
response = session.get(data_url)

print("查询结果:")
print(response.json())

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文