【Python第三方库】Requests全面解析

文章目录

requests 是一个非常流行的 Python HTTP 库,用于发送所有类型的 HTTP 请求。它简洁易用,能够处理复杂的请求场景,如保持会话、处理 cookies、上传文件等。本篇只对GET和POST做简单说明,其他请求类似。

安装

要在 Python 中使用 requests 库,首先需要安装它。可以使用以下指令进行安装:

bash 复制代码
pip install requests

如果遇到网络环境导致下载失败,可以使用国内第三方镜像站进行安装,这里使用的是阿里云镜像:

bash 复制代码
pip install requests -i https://mirrors.aliyun.com/pypi/simple

基本用法

测试网站

在接下来的代码示例中,会使用到 httpbin.org 工具。httpbin.org 是一个专门用于测试 HTTP 请求的服务网站。这个网站由 Kenneth Reitz 创建,目的是为开发者提供一个简单的工具来测试和调试各种 HTTP 请求。你可以使用它来发送各种类型的 HTTP 请求(如 GET、POST、PUT、DELETE 等),并查看服务器返回的内容。

以下是 httpbin.org 提供的一些常见测试端点:

  • /get:用于测试 GET 请求。它会返回你发送的查询参数、请求头等信息。
  • /post:用于测试 POST 请求。你可以发送表单数据或 JSON 数据,并查看服务器返回的数据。
  • /status/:code:用于测试不同的 HTTP 状态码。例如,/status/404 会返回一个 404 状态码。
  • /redirect/:n:用于测试重定向。/redirect/3 会重定向 3 次。
  • /cookies 和 /cookies/set:用于测试 cookie 的处理。
  • /delay/:seconds:用于测试请求延迟。它会延迟指定的秒数后再响应。
  • /basic-auth/:user/:passwd:用于测试基本 HTTP 身份验证。

当你在开发过程中需要测试各种 HTTP 行为时。例如,你可以使用它来验证你的客户端是否正确处理重定向、身份验证、请求头、响应格式等。

发送GET请求

GET 请求用于从服务器获取数据。最简单的形式如下:

python 复制代码
import requests

response = requests.get('http://httpbin.org/get')
print(response.status_code)  # 输出状态码,例如 200
print(response.text)  # 输出响应内容

发送POST请求

POST 请求通常用于提交数据到服务器,例如提交表单数据。

python 复制代码
import requests

payload = {'key1': 'value1', 'key2': 'value2'}
res = requests.post(url="http://httpbin.org/post",data=payload)
print(res.json())

更多请求

  1. requests.get(url, params=None, **kwargs): 发送一个HTTP GET请求,并返回一个Response对象。可以使用params参数传递查询参数,也可以使用**kwargs参数传递其他的请求参数,如headers、timeout等。
  2. requests.post(url, data=None, json=None, **kwargs): 发送一个HTTP POST请求,并返回一个Response对象。可以使用data参数传递表单数据,也可以使用json参数传递JSON数据,还可以使用**kwargs参数传递其他的请求参数,如headers、timeout等。
  3. requests.put(url, data=None, **kwargs): 发送一个HTTP PUT请求,并返回一个Response对象。可以使用data参数传递请求数据,也可以使用**kwargs参数传递其他的请求参数,如headers、timeout等。
  4. requests.delete(url, **kwargs): 发送一个HTTP DELETE请求,并返回一个Response对象。可以使用**kwargs参数传递请求参数,如headers、timeout等。
  5. requests.head(url, **kwargs): 发送一个HTTP HEAD请求,并返回一个Response对象。可以使用**kwargs参数传递请求参数,如headers、timeout等。
  6. requests.options(url, **kwargs): 发送一个HTTP OPTIONS请求,并返回一个Response对象。可以使用**kwargs参数传递请求参数,如headers、timeout等。
  7. requests.exceptions: requests库的异常类,如Timeout、ConnectionError等,可以用于捕获请求过程中可能出现的异常情况。

请求参数

可以通过 params 参数将查询参数添加到 URL 中,params 用于添加 URL 查询参数。这些参数会附加在 URL 后面,格式为 key=value,多个参数之间用 & 分隔。

python 复制代码
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)

发送的实际请求 URL 会是:

python 复制代码
https://api.example.com/data?key1=value1&key2=value2

请求头

自定义请求头可以通过 headers 参数传递。用于设置 HTTP 请求头。它用来传递额外的信息给服务器。可以把它想象成你写信时附上的说明,比如告诉收信人你是谁、信的内容类型等。

python 复制代码
import requests

headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://httpbin.org/get', headers=headers)
print(response.text)

其他常用请求属性

  • timeout :用于设置请求的超时时间,单位是秒。如果请求超过指定时间未完成,会抛出requests.exceptions.Timeout异常。

  • auth:用于处理 HTTP 身份验证。比如,当你访问某个网页时,可能会弹出一个窗口要求输入用户名和密码,这就是一种基本的 HTTP 身份验证。假设你要访问一个需要登录的 API 或网页,你需要提供正确的用户名和密码,服务器才会允许你访问。

    python 复制代码
    from requests.auth import HTTPBasicAuth
    response = requests.get(url, auth=HTTPBasicAuth('user', 'pass'))

    HTTPBasicAuth 是处理基本身份验证的简单方法,特别适合用来访问那些需要用户名和密码的简单 API 或网页。

  • cookies:用于发送 HTTP cookies,可以是一个字典。是服务器与客户端之间交换的小型数据,用于记住用户的信息和状态。

处理响应

请求会返回一个 Response 对象,该对象包含了服务器返回的数据和状态信息。

响应状态码

status_code属性用于获取 HTTP 响应状态码,如 200(成功)、404(未找到)、500(服务器错误)等:

python 复制代码
if response.status_code == 200:
    print('Success!')
elif response.status_code == 404:
    print('Not Found.')

响应内容

requests 提供了多种方式获取响应内容:

  • text:返回响应内容的字符串形式。它自动将响应的字节数据解码为 Unicode 字符串,使用的是 HTTP 响应头中指定的字符编码(通常是 UTF-8)。
  • content:返回响应内容的二进制形式。不进行任何解码。这对于处理非文本内容(如图片、音频文件、视频文件、压缩包等)非常有用。适用于处理二进制文件,如图片、音频文件、PDF 文档等。
  • json():如果响应内容是 JSON 格式,可以使用此方法将其解析为 Python 字典。
  • url:返回请求的最终 URL(包括重定向后的 URL)
  • headers:返回一个包含响应头的字典。
  • cookies:返回服务器在响应中设置的 cookies。

处理超时

可以通过 timeout 参数设置请求的超时时间(单位为秒)。如果请求超时,会抛出 requests.exceptions.Timeout 异常。

python 复制代码
try:
    response = requests.get('https://httpbin.org/delay/10', timeout=2)
except requests.exceptions.Timeout:
    print('The request timed out')

处理异常

当使用requests库发送HTTP请求时,有可能会发生异常情况,例如网络错误、连接超时等。为了处理这些异常情况,我们可以使用Python的异常处理机制。requests库中定义了多种异常类型,可以用来捕获和处理各种HTTP请求相关的异常情况。

在使用requests库时,我们应该始终使用try-except语句来捕获和处理可能发生的异常。以下是一些常见的异常类型:

  • requests.exceptions.RequestException: 所有异常的基类,可以用来捕获所有的异常情况。
  • requests.exceptions.Timeout: 当请求超时时,抛出此异常。
  • requests.exceptions.Timeout: 当请求超时时,抛出此异常。
  • requests.exceptions.HTTPError: 当HTTP请求返回错误状态码时,抛出此异常。

以下是一个例子,演示如何使用try-except语句来捕获请求可能出现的异常情况:

python 复制代码
import requests

try:
    r = requests.get('https://www.baidu.com/', timeout=3)
    r.raise_for_status()
except requests.exceptions.Timeout as e:
    print('请求超时:', e)
except requests.exceptions.ConnectionError as e:
    print('连接错误:', e)
except requests.exceptions.HTTPError as e:
    print('HTTP错误:', e)
except requests.exceptions.RequestException as e:
    print('其他异常:', e)

在上述代码中,我们首先使用try语句来执行requests.get()方法,如果发生异常,则会跳转到相应的except块进行处理。如果请求超时、连接错误或者HTTP错误,将会抛出相应的异常,并且打印相应的错误信息。如果发生其他异常情况,则会抛出requests.exceptions.RequestException异常,并打印相应的错误信息。

通过使用异常处理机制,我们可以有效地处理请求中可能出现的各种异常情况,以确保我们的程序能够在不稳定的网络环境中稳定地运行。


相关推荐
youcans_10 分钟前
2025年数学建模美赛 A题分析(4)楼梯使用人数模型
python·数学建模
半个番茄1 小时前
C 或 C++ 中用于表示常量的后缀:1ULL
c语言·开发语言·c++
玉带湖水位记录员2 小时前
状态模式——C++实现
开发语言·c++·状态模式
zhao3266857512 小时前
如何有效利用数据采集HTTP代理
网络·网络协议·http
查理零世2 小时前
【算法】数论基础——约数个数定理、约数和定理 python
python·算法·数论
Eiceblue3 小时前
Python 合并 Excel 单元格
开发语言·vscode·python·pycharm·excel
单片机社区3 小时前
随笔十七、eth0单网卡绑定双ip的问题
网络·嵌入式硬件·网络协议·udp·智能路由器
安静的做,安静的学4 小时前
网络仿真工具Core环境搭建
linux·网络·网络协议
SomeB1oody4 小时前
【Rust自学】15.2. Deref trait Pt.1:什么是Deref、解引用运算符*与实现Deref trait
开发语言·后端·rust
情深不寿3175 小时前
C++----STL(list)
开发语言·c++