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

在这里插入图片描述

文章目录

  • 安装
  • 基本用法
    • 测试网站
    • 发送GET请求
    • 发送POST请求
    • 更多请求
    • 请求参数
    • 请求头
    • 其他常用请求属性
    • 处理响应
      • 响应状态码
      • 响应内容
    • 处理超时
    • 处理异常

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

安装

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

pip install requests

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

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 请求用于从服务器获取数据。最简单的形式如下:

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

在这里插入图片描述

发送POST请求

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

import requestspayload = {'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,多个参数之间用 & 分隔。

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)

发送的实际请求 URL 会是:

https://api.example.com/data?key1=value1&key2=value2

请求头

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

import requestsheaders = {'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 或网页,你需要提供正确的用户名和密码,服务器才会允许你访问。

    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(服务器错误)等:

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 异常。

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语句来捕获请求可能出现的异常情况:

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

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/396204.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——栈的讲解(超详细)

前言: 小编已经在前面讲完了链表和顺序表的内容,下面我们继续乘胜追击,开始另一个数据结构:栈的详解,下面跟上小编的脚步,开启今天的学习之路! 目录 1.栈的概念和结构 1.1.栈的概念 1.2.栈的结构…

Vatee万腾平台:数据智能的创新引擎,引领企业数字化转型新纪元

在数字化转型的浪潮中,企业正以前所未有的速度重构着自身的运营模式与核心竞争力。作为这一变革的领航者,Vatee万腾平台凭借其卓越的数据智能能力,正逐步揭开企业数字化转型的新篇章。本文将深入探讨Vatee万腾平台如何以数据为核心&#xff0…

【多线程基础】进程和线程的区别和联系(重要)

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Java多线程 📚本系列文章为个人…

【JavaEE】CAS原理

目录 ​前言 什么是CAS? 如何使用CAS? CAS实现自旋锁 CAS的ABA问题 面试题 1.讲解下你自己理解的CAS机制 2.ABA问题怎么解决? 前言 在多线程中,多个线程同时对一个共享变量进行读写操作,那么就会出现线程安全问…

01 NoSQL之Redis配置与优化

目录 1.1 Redis介绍 1.1.1关系数据库与非关系型数据库 1 . 关系型数据库 2. 非关系型数据库 3.非关系型数据库产生背景 (1) High performance--对数据库高并发读写需求 (2) Huge Storage--对海量数据高效存储与访问需求 (3) High Scalability …

gitlab cicd快速入门有哪些方法 gitlabcicd和Jenkins哪个更好用

在现代软件开发中,持续集成和持续交付(CI/CD)已成为必不可少的流程。它们不仅能提高开发效率,还能保证代码的质量和稳定性。在众多CI/CD工具中,GitLab和Jenkins是最为常用的两种。本文将围绕“gitlab ci/cd快速入门有哪…

vuex properties of undefined (reading ‘getters‘)

前言: 最近打算用vue 写个音乐播放器,在搞 vuex 的时候遇到一个很神奇报错;vuex 姿势练了千百次了,刚开始的时候我一直以为是代码问题,反复检查了带了,依旧报错。 Error in mounted hook: "TypeError:…

[Android] [解决]Bottom Navigation Views Activity工程带来的fragment顶部空白间距问题

用Android Stuio创建一个Bottom Navigation Views Activity工程, 我们刻意设置一下fragment背景为黑色,会发现,这个fragment离顶部还有一段不小空白距离, 怎么解决呢? 在activity_main.xml里面,删掉这句&a…

极狐GitLab安全版本:16.10.1、16.9.3、16.8.5

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

数据结构之线性表(单链表的实现)

目录 一、单链表的原理 二、单链表的实现 1.单链表的定义 2.单链表的初始化 3.清空单链表 4.单链表是否为空 5.单链表的长度 6.获取指定位置 i 的元素 7.获取指定元素 e 的位置 8.向链表中插入指定位置的元素 9.向链表中删除指定位置的元素 10.遍历链表中的元素 …

告别手动操作!KeyMouseGo实现自动化工作流

前言 在这个快节奏的时代,我们每天都在与电脑打交道,重复着那些繁琐而单调的操作;你是否曾想过,能让电脑自己完成这些任务,而你则悠闲地喝着咖啡,享受着生活?今天,就让我们一起揭开一…

【sdk】- 对接阿里云抠图

文档地址:https://help.aliyun.com/zh/viapi/use-cases/general-image-segmentation?spma2c4g.11186623.0.0.3814173cenldIs java对接阿里云的通用分割,将代码原封不动复制进来,执行结果失败,咨询阿里云的人员之后,由…

优盘数据救援:应对文件与目录损坏的全方位指南

一、问题剖析:优盘文件或目录损坏的困境 在数字化时代,优盘(USB闪存驱动器)作为便携、高效的数据存储工具,广泛应用于数据传输、备份与分享。然而,面对频繁的使用与不当操作,优盘中的文件或目录…

FPGA常见型号

FPGA(现场可编程门阵列)开发板种类繁多,涵盖了从入门级教育用途到高性能工业应用的广泛领域。以下是一些常见的 FPGA 开发板型号及其特点: 1. Xilinx(赛灵思)系列 Xilinx 是 FPGA 领域的领导者之一&#…

Ubuntu22.04安装Docker教程

简介 ​ Docker 是一个开源的平台,旨在简化应用开发、交付和运行的过程。通过使用容器技术,Docker 能够让开发人员将应用及其依赖环境一同打包,从而实现快速部署、一致的开发环境和优秀的可移植性。 系统版本 ​ 本文以Ubuntu 22.04.4 LTS…

【探索Linux】P.46(高级IO —— 五种IO模型简介 | IO重要概念)

阅读导航 引言一、五种IO模型1. 阻塞IO(1)定义(2)特点 2. 非阻塞IO(1)定义(2)特点 3. IO多路复用(1)定义(2)特点 4. 信号驱动IO&#…

深入探索:【人工智能】、【机器学习】与【深度学习】的全景视觉之旅

目录 第一部分:人工智能、机器学习与深度学习概述 1.1 人工智能的概念与发展 代码示例:简单的AI决策系统 1.2 机器学习的定义与分类 代码示例:简单的线性回归模型 1.3 深度学习的基础与应用 代码示例:构建简单的神经网络 …

【TwinCAT】TwinCAT3 PLC HMI在WIN10系统中的全屏显示及用户管理

在工业自动化领域,TwinCAT3 PLC HMI 是一款强大的可视化工具,它支持多种操作系统,并且能够满足不同控制器的需求。在本文中,我们将详细介绍如何在WIN10系统中进行全屏显示设置以及如何进行用户管理配置。 一、TwinCAT3 PLC HMI 全屏显示方法 1. 创建Visualization和配置Vi…

Git开发流程

Git开发流程规范如下: 详情参考:https://www.processon.com/view/link/5d0cf86ce4b0376de9c19e16

【自动驾驶】ROS中自定义格式的服务通信,含命令行动态传参(c++)

目录 通信流程创建服务器端及客户端新建服务通讯文件修改service的xml及cmakelistCMakeLists.txt编辑 msg 相关配置编译消息相关头文件在cmakelist中包含头文件的路径在service包下编写service.cpp在client包下编写client.cpp测试运行查询服务的相关指令列出目前的所有服务&…