Python教程(十四):Requests模块详解

news2024/11/15 21:44:08

目录

    • 专栏列表
    • 前言:
    • 安装 Requests
      • 查看包安装情况:
    • RESTful 介绍
      • RESTful API设计原则
      • 示例
    • 基本用法
      • 1. 查询ID为1的用户(GET)
      • 2. 创建新用户(POST)
      • 3. 更新ID 为 1 的用户(PUT)
      • 4. 删除ID 为 1 的用户(DELETE)
    • 响应对象
    • 会话(Session)
    • 异常处理
    • 高级用法
      • 流式上传
      • 处理重定向
      • 使用代理
      • 请求超时
    • 总结:

专栏列表

  • Python教程(十):面向对象编程(OOP)
  • Python教程(十一):单元测试与异常捕获
  • Python教程(十二):面向对象高级编程详解
  • Python教程(十三):常用内置模块详解

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


前言:

Requests 是一个Python第三方库,用于发送HTTP请求。它以简单易用而著称,隐藏了HTTP协议的复杂性,让开发者能够用很少的代码完成HTTP请求的发送和处理:

安装 Requests

首先,你需要安装Requests库(如果你还没有安装的话)。可以通过自带的 pip 命令来安装:

pip install requests

在这里插入图片描述

查看包安装情况:

  • 可以使用已下命令:
pip show requests
# or
pip list 

在这里插入图片描述

RESTful 介绍

RESTful API设计原则

  • 使用HTTP方法GET用于获取资源,POST用于创建资源,PUT用于更新资源,DELETE用于删除资源。
  • 使用URI:资源的标识符,例如/users/{userId}
  • 使用状态码:例如200表示成功,404表示未找到,500表示服务器错误等。
  • 使用JSON或XML:作为数据交换格式。
  • 避免使用动词:所有的操作都应该通过HTTP方法和URI来表达,而不是通过URI中的动词。
  • 使用集合和文档:集合是资源的集合,文档是单个资源的表示。

示例

假设有一个用户资源,RESTful API可能如下:

  • 获取用户列表:GET /users
  • 获取单个用户信息:GET /users/{userId}
  • 创建新用户:POST /users
  • 更新用户信息:PUT /users/{userId}
  • 删除用户:DELETE /users/{userId}

基本用法

安装完成后,你可以开始使用Requests发送HTTP请求了。接下来我们将使用一个在线的RestfulAPI 进行实例使用,完成对用户信息的增删查改:

jsonplaceholder.typicode.com 是一个免费的在线REST API,用于测试和原型设计。它提供了一组JSON资源,包括用户、帖子、评论等,允许你执行CRUD(创建、读取、更新、删除)操作。

1. 查询ID为1的用户(GET)

查询用户的示例:

import requests
import json

# API URL
url = 'https://jsonplaceholder.typicode.com/users/1'

# 发送GET请求
response = requests.get(url)

# 检查请求是否成功
if response.status_code == 200:
	# 打印响应内容
    #print(response.text)
    # 将响应内容解析为JSON
    user = response.json()
    print("查询到的用户信息:")
    print(json.dumps(user, indent=4)) # 格式化json数据
else:
    print("请求失败,状态码:", response.status_code)

在这里插入图片描述

2. 创建新用户(POST)

创建新用户的示例:

import requests
import json

# 用户数据
new_user = {
    "name": "张三",
    "username": "zhangsan",
    "email": "zhangsan@example.com"
}

# 发送POST请求
response = requests.post('https://jsonplaceholder.typicode.com/users', json=new_user)

# 检查请求是否成功
if response.status_code == 201:
    created_user = response.json()  # 获取创建后的用户信息
    print("创建的用户信息:")
    print(json.dumps(created_user, indent=4))
else:
    print("创建失败,状态码:", response.status_code)

在这里插入图片描述

3. 更新ID 为 1 的用户(PUT)

更新用户的示例:

import requests
import json

# 更新的用户数据
updated_user = {
    "name": "张三",
    "username": "zhangsan_updated",
    "email": "zhangsan_updated@example.com"
}

# 发送PUT请求
response = requests.put('https://jsonplaceholder.typicode.com/users/1', json=updated_user)

# 检查请求是否成功
if response.status_code == 200:
    updated_user_info = response.json()  # 获取更新后的用户信息
    print("更新后的用户信息:")
    print(json.dumps(updated_user_info, indent=4))
else:
    print("更新失败,状态码:", response.status_code)

在这里插入图片描述

4. 删除ID 为 1 的用户(DELETE)

删除用户的示例:

# 发送DELETE请求
response = requests.delete('https://jsonplaceholder.typicode.com/users/1')

# 检查请求是否成功
if response.status_code == 200:
    print("用户删除成功")
else:
    print("删除失败,状态码:", response.status_code)

在这里插入图片描述

  • jsonplaceholder.typicode.com API是只读的,意味着实际上你不能通过POST、PUT或DELETE请求来创建、更新或删除数据。这些请求会返回错误或不执行任何操作。
  • 上述示例中的POST、PUT和DELETE操作仅用于演示requests模块如何使用,实际上不会对jsonplaceholder的数据产生影响。
  • 通过这些示例,你可以了解如何使用Python的requests模块来发送HTTP请求,并处理响应。

响应对象

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

  • status_code: 响应的状态码。
  • text: 响应的文本内容。
  • json(): 解析JSON响应的方法。
  • headers: 响应的HTTP头部。
  • url: 请求的URL。

会话(Session)

Requests还支持会话(Session),它允许你共享某些行为和参数跨多个请求。这包括cookies、headers等。


import requests

# 创建一个Session对象
session = requests.Session()

# 假设我们首先访问一个页面,该页面设置了一个cookie
# httpbin.org/cookies 会返回一个设置了cookie的响应
set_cookie_url = 'https://httpbin.org/cookies/set?sessioncookie=test'

# 发送GET请求,服务器将设置cookie
response = session.get(set_cookie_url)

# 打印Session中的所有cookie
print("Session中的Cookie:")
for cookie in session.cookies:
    print(cookie.name, cookie.value)

# 现在访问另一个页面,Session会自动携带cookie
headers_url = 'https://httpbin.org/headers'

# 发送GET请求,查看请求头中的cookie
response = session.get(headers_url)
print("\n受保护页面的响应中的Cookie:")
print(f'返回的header {response.text}') 
print(f'cookie:{response.json()['headers']['Cookie']}')  # 打印服务器接收到的Cookie

在这里插入图片描述

异常处理

Requests使用异常来指示请求出现问题的地方,我们以获取用户信息为例

import requests
import json

# API URL
url = 'https://jsonplaceholder.typicode.com/users/1'

try:
    # 发送GET请求
    response = requests.get(url)
    # 检查请求是否成功
    if response.status_code == 200:
        user = response.json()  # 将响应内容解析为JSON
        print("查询到的用户信息:")
        print(json.dumps(user, indent=4))
    else:
        print("请求失败,状态码:", response.status_code)
except requests.exceptions.Timeout:
    print("请求超时")
except requests.exceptions.HTTPError as err:
    print(f"HTTP错误: {err}")
except requests.exceptions.RequestException as err:
    print(f"请求出错: {err}")

高级用法

Requests还支持一些高级用法,如:

  • 流式上传和下载。
  • 处理重定向。
  • 使用代理。
  • 请求超时设置。

流式上传

with open('file.txt', 'rb') as f:
    response = requests.post('https://httpbin.org/post', data=f)

处理重定向

response = requests.get('http://github.com', allow_redirects=True)
print(response.status_code)  # 应该不再是302

使用代理

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

response = requests.get('http://example.com', proxies=proxies)

请求超时

  • 通过设置 timeout 参数限制,单位为秒
response = requests.get('https://api.github.com', timeout=0.01)

总结:

Requests库的易用性和强大功能使其成为Python开发者进行HTTP请求的首选库之一。通过上述示例,你可以看到Requests的灵活性和表达能力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Haproxy讲解

Haproxy: haproxy是一个开源的高性能反向代理和负载均衡器,主要用于‌TCP和‌HTTP流量管理。 功能和特点:haproxy能够处理大量的并发连接,支持TCP和HTTP协议,具有高可用性和负载均衡功能。它特别适用于需要处理大量流量的网站&am…

AI终于会画手了,Flux.1一出世就直接碾压Stable Diffusion(SD)和Midjourney(MJ)

Flux.1模型一发布,AI文生图终于会画手了,Flux.1模型比Stable Diffusion(SD)和Midjourney(MJ)更能将手部和长文本生成得更好更合理。 Flux.1模型生成的图,现在手部不再有畸形了。 同时&#xff…

hfs通过stunnel实现https访问

hfs通过stunnel实现https访问 REF:官方文档,有点老旧 https://blog.51cto.com/u_15015155/2554641 步骤 下载stunnel工具 download (笔者用的是windows的) 下载stunnel途中会进行本地证书的制作(也可以用openssl自定义证书),如…

C++ 适配器

适配器 适配器是一种设计模式,我们最终实现的功能可以通过不同的路径来实现,那么这个路径就可以称作适配器。 例如下面的例子: 那么在c中也有适配器,例如stack、queue、priority_queue,它们并不是使用了什么新的内存…

【python爬虫】利用Python爬取天气数据,并做可视化分析

首先登录网站,查看网页内容及数据格式(使用代码查看内容),选择两个城市及对应月份,爬取对应天气数据,进行数据预处理(如缺失值处理、数据类型转换、字符串截取等),数据的初步探索性分析(如描述性统计、数据可视化查看数…

应对猫咪掉毛挑战,希喂、小米热门宠物空气净化器实测功效PK

随着养宠人群的增多,铲屎官们的需求日益增长,市场上出现了很多品牌的宠物空气净化器。然而,产品质量参差不齐,给消费者选择带来不少困难。劣质宠物空气净化器不仅无法有效去除宠物毛发、皮屑、异味及空气中的有害微粒,…

启动虚拟机:另一个程序已锁定文件的一部分,进程无法访问,打不开磁盘xxx或它所依赖的某个快照磁盘

theme: nico 你们好,我是金金金。 场景 启动虚拟机时报错如下 造成error的原因 这是一种虚拟机的保护机制 虚拟机在运行时,为了防止数据被篡改,会将所运行的文件保护起来。 当虚拟机突然崩溃或强制结束导致异常退出(我昨天是直接…

【C++】设计模式 — 从零开始认识单例模式

人的一生本来就是一场有来无回的冒险。 --- priest 《残次品》--- 设计模式 — 单例模式 1 设计模式2 单例模式2.1 饿汉模式2.2 懒汉模式 3 总结 1 设计模式 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结…

YZ系列工具之YZ05:代码运行中调用“计算器”使用说明

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套一部VBA手册,教程分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的…

语音播报加入预警系统

语音播报加入预警系统 引言 引入语音警报 我们前一章, 已经把jq8900-16p模块, 单独进行了测试, 可以通过发送命令, 让模块播报设定好的声音。那么语音播报, 在预警系统中, 也必不可少, 我们现在有了led灯光警报,如果主人在睡觉, 是不能及时…

redis列表若干记录

2、列表 ziplist ziplist参数 entry结构 entry-data:节点存储的元素prelen:记录前驱节点长度encoding:当前节点编码格式encoding encoding属性 使用多个子节点存储节点元素长度,这种多字节数据存储在计算机内存中或者进行网络传输的时的字节…

排序算法——插入排序

一、插入排序概念 直接插入排序(Insertion Sort)是一种简单的排序算法,它的工作原理类似于人们手动排序卡片的方式。该算法通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插…

ubuntu、cpolar、api开启映射之路

1.国内cpolar安装 curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash或 cpolar短链接安装方式:(国外使用) curl -sL https://git.io/cpolar | sudo bash2.查看版本号,正常显示即为安装成功 cpolar …

HR系统怎么选?2024年10大热门工具评测

本文中介绍的工具有:Moka、名才MCHR、HiHR、华天动力HRM、红海eHR、易路eRoad、宏景HJSOFT、Gusto、Zenefits、BambooHR。 在当今竞争激烈的商业环境中,找到一个适合企业的HR系统可能是一个令人头疼的问题。市面上的HR工具琳琅满目,各有千秋&…

Django 自定义用户 VS 用户资料

Django是一个流行的Web框架,它提供了一套完整的用户认证系统,其中包括内置的User模型用于存储基本的用户信息,如用户名、密码等。然而,如果我们需要更详细的用户资料管理,比如添加更多的字段或者自定义验证规则&#x…

Linux 常见的冷知识集锦

一、前言 本文旨在记录那些常见的Linux概念和名词,但这些又没经常直接使用到,更多在底层运行,见过却又不是特别清楚的碎片知识,以温故知新。 二、知识点和概念说明 2.1、POSIX标准/协议 POSIX(Portable Operating S…

股票技术指标 RSI KDJ MACD

具体指标解释,大模型都有,只说作用 RSI(Relative Strength Index,相对强弱指数) 超买和超卖水平:通常情况下,RSI值超过70表示市场可能超买,而低于30表示可能超卖。这并不意味着价格…

数据结构:顺序二叉树(堆)

目录 前言 一、堆的实现 1.1 头文件 1.2 堆的初始化及销毁 1.3 堆的插入 1.4 堆的删除 1.5 取堆顶数据和判空 前言 前面我们讲了二叉树有顺序结构和链式结构,今天就来讲一下顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间…

HTTP请求的流转路径,从Tomcat到SpringMVC

本文主要讲一下,一个HTTP请求在后端服务的流转路径,Tomcat等一众servlet容器如何定义了Web应用的基础样貌,后来的MVC框架又是如何弱化了servlet的存在,改为自己实现请求派发的。 前些日子我写了十几篇文章来介绍Tomcat的架构&…

AI在医学领域:联邦学习 (FL) 在肿瘤学的应用综述

关键词:联邦学习 (Federated Learning, FL)、机器学习 (Machine Learning, ML)、肿瘤学 (Oncology)、数据隐私 (Data Privacy)、精准医疗 (Precision Medicine)、多模态 (Multi-modal) 肿瘤学正在经历快速的变革,这得益于机器学习(ML&#xf…