Python Requests模块发送HTTP请求完整指南

Leo
Leo
发布时间:2026-10-11| 3人浏览过
原创

本文详细讲解如何使用Python第三方库requests发送HTTP请求。涵盖模块安装、GET与POST请求基础用法、URL参数拼接、二进制响应处理、代理配置及Cookie会话管理。修正常见代码误区并提供可直接运行的示例,帮助开发者快速掌握日常API调用与自动化脚本的标准写法。

安装环境与基础导入

requests 是Python生态中最流行的HTTP客户端库之一,内部基于urllib构建,自动处理连接复用、重定向与编码解码。使用前需通过包管理器安装:

pip install requests

安装完成后,在代码顶部导入即可开始调用:

import requests

GET 请求:获取数据与参数传递

通过 requests.get() 可向目标网址发起GET请求。返回的 Response 对象包含状态码、响应头、正文等核心属性。

url = "https://www.poycode.cn/"
response = requests.get(url)
print(response.status_code)  # 200 表示请求成功
print(response.reason)       # OK 或具体描述
print(response.headers)      # 响应头字典

获取网页正文时,需注意 response.text 与 response.content 的区别:response.text 返回 str 类型,自动依据HTTP头部推断编码(如utf-8);若需强制指定编码,可直接赋值 response.encoding = 'gbk'。而 response.content 始终返回 bytes 类型,适合处理无法确定编码的原始字节流或二进制文件。

第1步:拼接URL查询参数

无需手动拼装问号与&,直接传入字典作为 params 参数,requests会自动完成转义:

payload = {'id': 1024, 'name': 'poycode'}
response = requests.get("https://www.poycode.cn/", params=payload)
print(response.url)

运行后可观察到 response.url 已自动追加参数:https://www.poycode.cn/?id=1024&name=poycode。

第2步:下载二进制资源

抓取图片或其他媒体文件时,直接写入 response.content 可避免编码转换导致的乱码或损坏:

img_url = "https://static.poycode.cn/wp-content/uploads/2023/06/20230602225540172.jpg"
res = requests.get(img_url)
with open('downloaded_image.png', 'wb') as f:
    f.write(res.content)
print("文件已保存至当前目录")

POST 请求:表单与JSON数据提交

向服务端提交数据时,根据目标接口要求的 Content-Type 选择对应参数:

# 提交 application/x-www-form-urlencoded 表单数据
resp_form = requests.post('https://httpbin.org/post', data={'key1': 'value1'})

# 提交 application/json 数据(自动序列化并设置Header)
resp_json = requests.post('https://httpbin.org/post', json={'key1': 'value1'})

推荐使用 json= 参数提交结构化数据,它会自动处理JSON序列化,省去手动调用 import json 的步骤。

代理配置与状态保持

当需要绕过地域限制或隐藏源IP时,可通过 proxies 字典指定代理:

proxies = {
    'http': 'http://proxy.example.com:8080',
    'https': 'http://proxy.example.com:8080'
}
response = requests.get('https://httpbin.org/ip', proxies=proxies)

Cookie与会话管理最佳实践

原文档中直接修改 headers 添加Cookie的做法并不规范。推荐以下两种标准方式:

  • 单次请求携带:直接使用 cookies 参数传入字典或 MozillaCookieJar 对象。
  • 跨请求保持状态:使用 requests.Session(),自动在域名间共享Cookie与连接池:
session = requests.Session()
session.cookies.set('session_id', 'abc123')

res1 = session.get('https://api.example.com/profile')
res2 = session.post('https://api.example.com/update', json={"status": 1})

关键细节与常见误区

在实际使用中,需注意以下几点以避开陷阱:

  1. 协议支持范围:requests 原生仅专注于 HTTP 与 HTTPS。尝试直接访问 ftp:// 或 smtp:// 地址会抛出异常。处理非HTTP协议应改用内置模块(如 ftplib、smtplib)或专用适配器。
  2. 超时控制:生产环境务必设置 timeout=(connect_timeout, read_timeout),例如 timeout=(5, 30),防止因网络卡顿导致程序无限期阻塞。
  3. 错误拦截:网络异常或HTTP错误状态码(如4xx/5xx)默认不会抛异常。建议调用 response.raise_for_status() 进行显式校验。

总结

通过上述步骤,已覆盖requests模块在日常开发中最核心的请求模式、参数处理、代理转发与状态保持。配合合理的超时设置与异常捕获,可稳定支撑接口联调、轻量级爬虫与自动化运维任务。以上就是使用Python Requests模块发送HTTP请求的详细方法,更多关于Python网络编程与接口调试的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。