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

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

本文详细讲解如何使用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 相关产品和应用

全部下载

专题列表