pin_drop当前位置:知识文库 ❯ 图文

requests库简介与安装教程 - Python HTTP请求入门指南

一、requests库概述

requests库是Python中最流行的第三方HTTP库,由Kenneth Reitz开发,以"HTTP for Humans"为口号。它基于urllib3构建,提供了简洁优雅的API,让发送HTTP请求变得极其简单。requests库支持HTTP/1.1协议的全部方法,自动处理编码、连接池、持久连接、Cookie持久化等底层细节,是Web爬虫、API调用、自动化测试等场景的首选工具。

与Python标准库中的urllib相比,requests的API设计更加人性化。你不需要手动处理URL编码、请求头拼接或响应解码,requests会自动为你完成这些繁琐的工作。这也是为什么requests成为了Python生态中下载量最大的第三方库之一。


二、安装与导入方法

requests是第三方库,不属于Python标准库,需要通过包管理工具进行安装。以下是几种常见的安装方式:

安装命令 说明
pip install requests 使用pip安装requests库(推荐)
pip install requests==2.31.0 安装指定版本
pip install --upgrade requests 升级到最新版本
conda install requests 使用conda安装(Anaconda环境)

安装完成后,通过 import requests 即可导入使用:

代码示例

import requests

# 查看版本号
print(f"requests版本: {requests.__version__}")
# 查看安装路径
print(f"安装路径: {requests.__file__}")
# 查看版权信息
print(f"版权: {requests.__copyright__}")

输出:

代码示例

requests版本: 2.31.0
安装路径: C:\Python39\lib\site-packages\requests\__init__.py
版权: Copyright 2023 Kenneth Reitz

三、核心功能与常用方法

requests库提供了完整的HTTP方法支持,以下是其核心功能模块:

HTTP请求方法

  • requests.get():发送GET请求,用于获取资源

  • requests.post():发送POST请求,用于提交数据

  • requests.put():发送PUT请求,用于全量更新资源

  • requests.patch():发送PATCH请求,用于部分更新资源

  • requests.delete():发送DELETE请求,用于删除资源

  • requests.head():发送HEAD请求,获取响应头信息

  • requests.options():发送OPTIONS请求,获取服务器支持的HTTP方法

核心类与对象

  • Session:会话对象,用于跨请求保持Cookie和连接

  • Response:响应对象,包含服务器返回的所有信息

  • Request:请求对象,用于构建自定义请求

  • PreparedRequest:预准备请求对象

常用异常类

  • RequestException:所有请求异常的基类

  • ConnectionError:连接错误异常

  • Timeout:请求超时异常

  • HTTPError:HTTP响应错误异常

  • URLRequired:URL缺失异常


四、代码示例详解

示例1:查看requests模块的完整功能清单

通过反射机制,可以查看requests库提供的所有HTTP方法和核心组件:

代码示例

import requests

# 列出主要的HTTP方法
http_methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options']
print("=== HTTP请求方法 ===")
for method in http_methods:
    func = getattr(requests, method)
    print(f"  requests.{method}() - {func.__doc__.strip().split(chr(10))[0] if func.__doc__ else '无文档'}")

# 列出核心类和对象
print("\n=== 核心类 ===")
core_classes = ['Session', 'Response', 'Request', 'PreparedRequest', 'CookieJar']
for cls_name in core_classes:
    if hasattr(requests, cls_name):
        print(f"  requests.{cls_name}")

# 列出异常类
print("\n=== 常用异常 ===")
exceptions = ['RequestException', 'ConnectionError', 'Timeout', 'HTTPError', 'URLRequired']
for exc_name in exceptions:
    if hasattr(requests.exceptions, exc_name):
        print(f"  requests.exceptions.{exc_name}")

输出:

代码示例

=== HTTP请求方法 ===
  requests.get() - Sends a GET request.
  requests.post() - Sends a POST request.
  requests.put() - Sends a PUT request.
  requests.patch() - Sends a PATCH request.
  requests.delete() - Sends a DELETE request.
  requests.head() - Sends a HEAD request.
  requests.options() - Sends a OPTIONS request.

=== 核心类 ===
  requests.Session
  requests.Response
  requests.Request
  requests.PreparedRequest
  requests.CookieJar

=== 常用异常 ===
  requests.exceptions.RequestException
  requests.exceptions.ConnectionError
  requests.exceptions.Timeout
  requests.exceptions.HTTPError
  requests.exceptions.URLRequired

示例2:发送第一个GET请求

代码示例

import requests

# 发送GET请求到测试服务器
response = requests.get('https://httpbin.org/get')

# 查看响应状态码
print(f"状态码: {response.status_code}")
# 查看响应编码
print(f"编码: {response.encoding}")
# 查看响应内容类型
print(f"内容类型: {response.headers.get('Content-Type')}")
# 查看响应文本前100个字符
print(f"响应内容: {response.text[:100]}")

输出:

代码示例

状态码: 200
编码: utf-8
内容类型: application/json
响应内容: {
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "httpbin.org"

小贴士

httpbin.org 是一个免费的HTTP请求测试服务,由Kenneth Reitz(requests作者)创建。它可以回显你发送的请求信息,非常适合用于调试和测试HTTP请求。在开发过程中,建议多用httpbin.org来验证你的请求是否正确。


五、实际应用场景

  • Web爬虫开发:使用requests获取网页HTML内容,配合BeautifulSoup或lxml解析数据,是Python爬虫的标准技术栈

  • 第三方API调用:调用天气API、地图API、支付接口、社交媒体API等,通过GET获取数据或通过POST提交数据

  • 自动化接口测试:对Web服务接口进行功能验证和回归测试,验证接口返回的状态码、响应数据和业务逻辑是否正确

  • 微服务间通信:在分布式系统中,服务之间通过HTTP接口进行数据交互和远程调用

  • 自动化运维脚本:监控服务器状态、调用云服务商API管理资源、发送告警通知等


六、注意事项与最佳实践

第三方库:requests库需要通过 pip install requests 安装,不属于Python标准库

SSL证书验证:生产环境中应设置 verify=True(默认值)确保HTTPS通信安全,不要随意设置verify=False

同步阻塞:requests的请求是同步阻塞的,如需高并发异步操作,请使用 aiohttphttpx


七、HTTP库对比

Python生态中有多个HTTP客户端库,各有适用场景。了解它们的差异有助于选择最适合项目的工具:

特性 requests urllib httpx aiohttp
安装方式 pip安装 标准库(内置) pip安装 pip安装
API简洁度 非常简洁 较繁琐 简洁 简洁
同步请求 支持 支持 支持 不支持
异步请求 不支持 不支持 支持 支持
HTTP/2 不支持 不支持 支持 不支持
Session支持 支持 不支持 支持 支持
学习难度

八、课后练习

练习1

安装requests库,并编写程序打印其版本号和安装路径

练习2

使用requests.get()访问 https://httpbin.org/get,打印响应的状态码和响应头信息

练习3

编写程序,使用try-except捕获requests可能抛出的ConnectionError异常,并给出友好的错误提示

常见问题

requests库和urllib有什么区别?

urllib是Python标准库,无需安装但API繁琐;requests是第三方库,需要pip安装但API极其简洁。requests底层基于urllib3构建,自动处理编码、Cookie、连接池等细节,开发效率远高于urllib。

requests支持异步请求吗?

requests本身不支持异步。如果需要异步HTTP请求,可以使用httpx(API与requests类似,支持async/await)或aiohttp(基于asyncio的异步HTTP框架)。

如何查看requests的版本号?

可以通过 requests.__version__ 查看版本号,或者在命令行中使用 pip show requests 命令查看。

verify=False有什么安全风险?

设置verify=False会跳过SSL证书验证,容易受到中间人攻击(MITM)。在生产环境中应始终使用verify=True,如果证书有问题应通过verify参数指定CA证书路径,而不是禁用验证。

标签: requests HTTP请求 Python库 网络编程 爬虫基础 API调用

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python hmac.compare_digest详解 - 恒定时间比较防时序攻击 下一篇: requests.get()详解 - Python发送GET请求完整教程

poll相关推荐