网站首页 > 技术文章 正文
一、requests库简介
requests是Python最流行的HTTP客户端库,语法简洁,功能强大,支持:
- 发送GET/POST/PUT/DELETE等HTTP请求
- 自动处理重定向、Cookie、会话(Session)
- 支持JSON数据解析、文件上传、代理设置等
安装:
pip install requests
二、基础用法
1. 发送GET请求
import requests
response = requests.get(" https://api.github.com ")
print(response.status_code) # 输出:200(成功)
print(response.text) # 输出HTML/JSON内容
2. 发送POST请求
payload = {"key1": "value1", "key2": "value2"}
response = requests.post(" https://httpbin.org/post ", data=payload)
print(response.json()) # 输出服务器返回的JSON数据
3. 添加请求头(Headers)
模拟浏览器行为,避免被服务器屏蔽:
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",
"Accept-Language": "en-US,en;q=0.5"
}
response = requests.get(" https://example.com ", headers=headers)
4. 处理查询参数(Query Parameters)
params = {"q": "Python", "page": 2}
response = requests.get(" https://api.example.com/search ", params=params)
print(response.url) # 输出: https://api.example.com/search?q=Python&page=2
三、高级功能
1. 处理JSON数据
- 自动解析JSON响应:
response = requests.get(" https://api.github.com/users/octocat ")
print(response.json()["login"]) # 输出:octocat
- 发送JSON数据:
data = {"name": "John", "age": 30}
response = requests.post(" https://api.example.com/user ", json=data)
2. 文件上传
files = {"file": open("report.pdf", "rb")}
response = requests.post(" https://api.example.com/upload ", files=files)
3. 超时设置
防止请求无限等待:
response = requests.get(" https://slow-api.com ", timeout=5) # 5秒超时
4. 会话管理(Session)
保持Cookie和连接池(适用于需要登录的场景):
session = requests.Session()
session.post(" https://example.com/login ", data={"username": "user", "password": "pass"})
response = session.get(" https://example.com/dashboard ") # 自动携带Cookie
四、异常处理
try:
response = requests.get(" https://invalid-url.com ", timeout=2)
response.raise_for_status() # 若状态码非2xx,抛出HTTPError异常
except requests.exceptions.RequestException as e:
print(f"请求失败:{e}")
五、实战案例
案例1:爬取网页标题
import requests
from bs4 import BeautifulSoup
url = " https://www.python.org/ "
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
title = soup.title.string
print(title) # 输出:Welcome to Python.org
案例2:调用REST API(GitHub)
import requests
# 获取用户仓库列表
response = requests.get(" https://api.github.com/users/octocat/repos ")
repos = response.json()
# 创建新仓库(需认证)
headers = {"Authorization": "token YOUR_GITHUB_TOKEN"}
new_repo = {"name": "test-repo"}
response = requests.post(" https://api.github.com/user/repos ", headers=headers, json=new_repo)
案例3:处理分页请求
base_url = " https://api.example.com/items?page= {}"
all_items = []
for page in range(1, 4): # 请求前3页
response = requests.get(base_url.format(page))
items = response.json()
all_items.extend(items)
print(f"共获取 {len(all_items)} 条数据")
六、常见问题与解决方案
1. SSL证书验证失败
# 禁用证书验证(仅测试环境使用!)
response = requests.get(" https://invalid-ssl-site.com ", verify=False)
2. 代理设置
proxies = {
"http": " http://proxy.example.com:8080 ",
"https": " http://proxy.example.com:8080 "
}
response = requests.get(" https://example.com ", proxies=proxies)
3. 响应编码问题
response.encoding = "utf-8" # 手动指定编码
print(response.text)
4. 上传文件失败
# 确保文件路径正确,且以二进制模式打开
files = {"file": ("report.pdf", open("report.pdf", "rb"), "application/pdf")}
response = requests.post(" https://api.example.com/upload ", files=files)
七、总结与下一步
- 核心收获:
- 掌握requests库基础用法(GET/POST/JSON)。
- 学会处理异常、会话管理、文件上传。
- 能调用REST API并解析响应数据。
- 上一篇: 浅谈代码审计+漏洞批量一把梭哈思路
- 下一篇: LabVIEW实现Oracle数据库的访问
猜你喜欢
- 2025-08-02 浅谈代码审计+漏洞批量一把梭哈思路
- 2025-08-02 做社媒效率开挂!2025 必懂 6 个神仙工具
- 2025-08-02 浏览器悄悄废弃了这个JavaScript API,90%开发者还在用
- 2025-08-02 从100到511的这些数字,HTTP状态码背后的秘密你知道多少?
- 2025-08-02 前端开发应该了解的八个浏览器 API
- 2025-05-11 四个小案例,学懂Python爬虫的requests库
- 2025-05-11 干货!最简单的检测爬虫突破封禁的方法
- 2025-05-11 SNAT/DNAT实现外网访问内网
- 2025-05-11 PHP类Web网站适应移动设备十贴士
- 2025-05-11 DrissionPage:让你的 Python 爬虫和自动化脚本飞起来!
- 08-02C|在一个结构体嵌套一个共用体实现一体多用
- 08-02C++中,常用的强制类型转换函数
- 08-02如何使用C语言编程实现一个推箱子游戏?技术核心和算法实现
- 08-02C++20 新特性(24):模板访问权限和typename的放宽
- 08-02C++零基础到工程实践
- 08-02[深度学习] Python人脸识别库face_recognition使用教程
- 08-02AI算法之怎么利用Python实现支持向量机SVM算法
- 08-02【机器学习】SVM支持向量机
- 1520℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 623℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 526℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 491℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 460℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)