首页 新闻动态 知识

Python requests库使用详解

发布时间:2025-03-27 15:49 点击:177

引言

在当今的互联网时代,数据获取和交互成为了开发者日常工作中的重要部分。无论是调用API、抓取网页内容,还是与远程服务器交互,一个高效易用的HTTP客户端库都是不可或缺的工具。Python的Requests库是目前最流行的HTTP客户端库,被誉为"HTTP for Humans"。它以简洁易用的API设计和强大的功能,成为Python开发者处理网络请求的首选工具。

本文将由浅入深地介绍Requests库的使用方法,从基础的GET请求到高级的会话管理,帮助你全面掌握这一强大工具。


初识Requests库

什么是Requests?

Requests是一个优雅而简单的Python HTTP库。它使得HTTP请求变得简单直观,无需手动添加查询字符串、对表单数据进行编码,或处理复杂的连接问题。与Python标准库中的urllib相比,Requests提供了更简洁的API和更丰富的功能。

为什么选择Requests?

  • 简洁易用:简化了HTTP请求的发送和处理流程
  • 功能完善:支持所有常见的HTTP方法和功能
  • 人性化设计:API设计符合直觉,易于使用
  • 活跃维护:持续更新和维护,社区支持良好
  • 广泛应用:几乎所有涉及网络请求的Python项目都在使用它

特性

requests

urllib

语法简洁性

极高,API设计人性化

较低,需要组合多个模块

会话支持

内置Session对象

需要手动管理Cookie

SSL验证

简单配置

需要额外代码

国际化域名

自动支持

需要额外处理

流式上传/下载

内置支持

复杂实现

连接池

自动管理

需要手动实现

超时控制

简单设置

需要额外代码

安装Requests

使用pip安装Requests非常简单:

# 基础安装
pip install requests
# 指定版本安装
pip install requests==2.31.0
 # 源码安装
git clone git://github.com/kennethreitz/requests.git
cd requests && pip install

发送GET/POST请求

GET请求

GET请求是最常用的HTTP请求方法,用于从服务器获取数据:


import requests

# 发送GET请求
response = requests.get('https://api.jisuapi.com/isbn/query')

# 打印响应状态码
print(f"状态码: {response.status_code}")

# 打印响应内容
print(response.text[:100])  # 只打印前100个字符

GET请求参数处理

向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请求

POST请求通常用于向服务器提交数据,以极速数据身份证识别为例:

# 发送表单数据
payload = {'appkey': 'appkey', 'pic': 'iVBORw0KGgoAAAANSUh......(图片的base64)'}
response = requests.post('https://api.jisuapi.com/idcardrecognition/recognize', data=payload)

# 打印响应
print(response.json())

POST请求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'])

其他HTTP请求方法

PUT和DELETE请求

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获取资源头信息,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

响应头和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)}")