【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异常,并打印相应的错误信息。

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


相关推荐
懒大王爱吃狼20 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
海绵波波10727 分钟前
Webserver(4.3)TCP通信实现
服务器·网络·tcp/ip
秃头佛爷1 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
待磨的钝刨1 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
深度学习lover2 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
XiaoLeisj3 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
热爱跑步的恒川3 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
API快乐传递者3 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
云飞云共享云桌面4 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
励志成为嵌入式工程师4 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim