在当今的互联网时代,数据获取和交互成为了开发者日常工作中的重要部分。无论是调用API、抓取网页内容,还是与远程服务器交互,一个高效易用的HTTP客户端库都是不可或缺的工具。Python的Requests库是目前最流行的HTTP客户端库,被誉为"HTTP for Humans"。它以简洁易用的API设计和强大的功能,成为Python开发者处理网络请求的首选工具。
本文将由浅入深地介绍Requests库的使用方法,从基础的GET请求到高级的会话管理,帮助你全面掌握这一强大工具。
Requests是一个优雅而简单的Python HTTP库。它使得HTTP请求变得简单直观,无需手动添加查询字符串、对表单数据进行编码,或处理复杂的连接问题。与Python标准库中的urllib相比,Requests提供了更简洁的API和更丰富的功能。
| 特性 | requests | urllib |
| 语法简洁性 | 极高,API设计人性化 | 较低,需要组合多个模块 |
| 会话支持 | 内置Session对象 | 需要手动管理Cookie |
| SSL验证 | 简单配置 | 需要额外代码 |
| 国际化域名 | 自动支持 | 需要额外处理 |
| 流式上传/下载 | 内置支持 | 复杂实现 |
| 连接池 | 自动管理 | 需要手动实现 |
| 超时控制 | 简单设置 | 需要额外代码 |
使用pip安装Requests非常简单:
# 基础安装 pip install requests # 指定版本安装 pip install requests==2.31.0 # 源码安装 git clone git://github.com/kennethreitz/requests.git cd requests && pip install
GET请求是最常用的HTTP请求方法,用于从服务器获取数据:
import requests
# 发送GET请求
response = requests.get('https://api.jisuapi.com/isbn/query')
# 打印响应状态码
print(f"状态码: {response.status_code}")
# 打印响应内容
print(response.text[:100]) # 只打印前100个字符
向URL传递查询参数是GET请求的常见需求,以极速数据ISBN查询接口为例:
# 带参数的GET请求
params = {'appkey': 'appkey', 'isbn': '9787212058937'}
response = requests.get('https://api.jisuapi.com/isbn/query', params=params)
# 查看实际发送的URL
print(f"请求URL: {response.url}")
# 解析JSON响应
data = response.json()
print(f"参数: {data['args']}") POST请求通常用于向服务器提交数据,以极速数据身份证识别为例:
# 发送表单数据
payload = {'appkey': 'appkey', 'pic': 'iVBORw0KGgoAAAANSUh......(图片的base64)'}
response = requests.post('https://api.jisuapi.com/idcardrecognition/recognize', data=payload)
# 打印响应
print(response.json()) 当前一些主流API通常使用JSON格式交换数据:
# 发送JSON数据
json_payload = {'name': 'test', 'description': 'some test data'}
response = requests.post('http://api.jisuapi.com/post', json=json_payload)
# 打印响应
print(response.json()['json']) PUT用于更新资源,DELETE用于删除资源:
# PUT请求
response = requests.put('http://api.jisuapi.com/put', data={'key': 'updated_value'})
# DELETE请求
response = requests.delete('http://api.jisuapi.com/delete') HEAD获取资源头信息,OPTIONS获取资源支持的方法:
# HEAD请求
response = requests.head('http://api.jisuapi.com/get')
print(dict(response.headers))
# OPTIONS请求
response = requests.options('http://api.jisuapi.com/get')
print(response.headers['Allow']) 响应对象包含了服务器响应的各种信息:
response = requests.get('http://api.jisuapi.com/get')
# 状态信息
print(f"状态码: {response.status_code}")
print(f"状态消息: {response.reason}")
print(f"是否成功: {response.ok}")
# 编码信息
print(f"响应编码: {response.encoding}")
response.encoding = 'utf-8' # 手动设置编码 响应对象提供多种方式获取响应内容:
# 文本内容
print(f"文本内容: {response.text[:50]}...")
# 二进制内容
print(f"二进制内容长度: {len(response.content)} 字节")
# JSON内容
if 'application/json' in response.headers.get('Content-Type', ''):
data = response.json()
print(f"JSON数据: {data}") 响应头和Cookie包含了服务器返回的元数据:
# 响应头
print(f"内容类型: {response.headers['Content-Type']}")
print(f"所有响应头: {dict(response.headers)}")
# Cookie
print(f"Cookies: {dict(response.cookies)}") 响应对象还包含重定向历史和原始请求信息:
# 重定向历史
response = requests.get('http://api.jisuapi.com/redirect/1')
print(f"重定向历史: {[r.status_code for r in response.history]}")
print(f"最终URL: {response.url}")
# 请求信息
print(f"请求方法: {response.request.method}")
print(f"请求URL: {response.request.url}")
print(f"请求头: {dict(response.request.headers)}")


© 2015-2025 杭州极速互联科技有限公司 版权所有 浙ICP备17047587号-4 浙公网安备33010502005096 增值电信业务经营许可证:浙B2-20190875