在当今的互联网时代,数据获取和交互成为了开发者日常工作中的重要部分。无论是调用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-2024 杭州极速互联科技有限公司 版权所有 浙ICP备17047587号-4 浙公网安备33010502005096 增值电信业务经营许可证:浙B2-20190875