python-24-一篇文章彻底掌握Python HTTP库Requests

python-24-一篇文章彻底掌握Python HTTP库Requests

一.简介

在 Python 中,Requests 是一个非常流行且易于使用的 Python HTTP 库,专门用于发送 HTTP/HTTPS 请求,获取请求响应;

可能觉得HTTP请求不是应该前端去做么?不要这样想,我还见过数据库用SQL语言发送HTTP请求呢!

Python发送HTTP请求那就正常太多!其实后端语言发送HTTP请求的场景很多。

这个应用场景是什么?不要和FastAPI和Django 这些提供API接口的框架混淆!因为我们今天介绍的是请求,不是提供API被请求。。。

我常用的场景有以下:

1.抓取一些网站资源,比如打造自己的翻译工具;

2.微信小程序服务端开发,企业微信服务端开发,钉钉自建应用服务段开发等 都需要Requests 跟这些平台提供的api接口进行交互;

3.有些硬件通信比如门禁设备 食堂 水表 电表等数据交换;

4.还有前端CORS跨域请求异常的,我可以用后端来请求,毕竟跨域请求是浏览器的概念跟后端请求没关系。

所以说Requests 在真实项目开发中是必须要掌握的一件事情!

好,开始我们今天的日拱一卒!

二.安装Requests 库

pip install requests

官方文档:https://requests.readthedocs.io/

三.测试网站

测试网站,就是用来模拟请求的API,行业内又叫乒乓接口

https://httpbin.org/

四.发送 HTTP 请求

  1. GET 请求

这个请求最简单,但是有局限性,是基于url来请求和传承,存在问题如下:

  • 请求内容容易被抓取,请求参数容易暴露;

  • 请求传参有基于url有大小限制一般为 4,096 - 8,192 字符

请求示例

import requests

response = requests.get('https://api.github.com')

# 输出响应的状态码
print(response.status_code)

# 输出响应的内容
print(response.text)  # 或者 response.json() 如果返回的是 JSON 格式的数据

'''
200
{
  "current_user_url": "https://api.github.com/user",
  "current_user_authorizations_html_url": "https://github.com/settings/connections/applications{/client_id}",
  "authorizations_url": "https://api.github.com/authorizations",
   ……………………等等
'''

来个不一样的请求,只为交流学习测试用。。。

import requests

response = requests.get('https://www.iciba.com/word?w=hello,world')

# 输出响应的状态码
print(response.status_code)

# 输出响应的内容
print(response.text)  # 或者 response.json() 如果返回的是 JSON 格式的数据

#构造get请求参数
import requests
params = {'w': 'hello,world'}
response = requests.get('https://www.iciba.com/word',params=params)
print(response.url)  # 显示完整的 URL  https://www.iciba.com/word?w=hello%2Cworld
# 输出响应的状态码
print(response.status_code) #200
# 输出响应的内容
print(response.text) 

在这里插入图片描述

示例2:

import requests
r = requests.get(url='http://dict.baidu.com/s', params={'wd': '火龙果'}) # 带参数的GET请求
print(r.url)
print(r.text)

在这里插入图片描述

2.POST 请求

这个请求用的是最多,我还看到有的公司规定请求全部是POST

import requests

# 发送一个带数据的 POST 请求
data = {'username': 'test', 'password': '123456'}
response = requests.post('https://httpbin.org/post', data=data)

# 查看返回的 JSON 数据
print(response.json())
'''
输出:
{'args': {}, 'data': '', 'files': {}, 'form': {'password': '123456', 'username': 'test'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '29', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.27.1', 'X-Amzn-Trace-Id': 'Root=1-672df996-46a1cb3506a476a842fee9ad'}, 'json': None, 'origin': '112.32.85.96', 'url': 'https://httpbin.org/post'}
'''

3.PUT 请求(用的少,了解即可)

import requests

# PUT 请求更新某个资源
data = {'name': 'new_name'}
response = requests.put('https://httpbin.org/put', data=data)

# 查看返回的内容
print(response.json())

4.DELETE 请求

见名知义,用来请求删除资源,但是会不会删除资源跟这个请求方式没有关系。。

import requests

response = requests.delete('https://httpbin.org/delete')

print(response.status_code)

五.请求头(Headers)

Requests 允许你向请求中添加自定义的 HTTP 头。例如,发送请求时,你可能需要设置 User-AgentAuthorizationContent-Type 等头信息。

示例:

import requests

headers = {'User-Agent': 'MyApp/1.0'}
response = requests.get('https://httpbin.org/headers', headers=headers)

print(response.json())

六.设置超时

try:
    response = requests.get('https://httpbin.org/delay/10', timeout=5)
except requests.exceptions.Timeout:
    print("请求超时!")

七.获取请求响应信息

#获取状态码
print(response.status_code)  # 200 表示成功

#获取响应内容
print(response.text)  # 如果响应是文本内容
print(response.json())  # 如果响应是 JSON 格式

#获取响应头
print(response.headers)

#获取请求的 URL
print(response.url)

#获取请求的 Cookies
print(response.cookies)

八.代理设置

import requests
proxies = {
'http':'http://10.10.1.10:3128',
'https':'https://10.10.1.10:1080'
}
requests.get('http://httpbin.org/ip',proxies=proxy)
print(response.text)

九.附请求头表

请求头作用示例
User-Agent指定客户端的类型(浏览器、爬虫等)。服务器根据该信息返回相应的内容。User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept指定客户端能够接受的响应内容类型。服务器根据此返回符合格式的响应。Accept: application/jsonAccept: text/html
Accept-Encoding指定客户端支持的内容编码方式,通常用于压缩响应内容(如 gzip、deflate)。Accept-Encoding: gzip, deflate
Content-Type指定请求体的类型,常用于 POST 或 PUT 请求,告诉服务器客户端发送的数据格式。Content-Type: application/jsonContent-Type: application/x-www-form-urlencoded
Authorization用于身份认证,携带认证信息(如 Basic Auth、Bearer Token)。Authorization: Bearer <token>Authorization: Basic <base64-encoded credentials>
Host指定请求的目标主机,通常是域名或 IP 地址,必须在 HTTP/1.1 请求中提供。Host: www.example.com
Cookie发送客户端保存的 cookies,服务器根据 cookies 保持用户会话或跟踪用户。Cookie: sessionid=abc123; logged_in=true
Connection控制连接的管理方式,常见值为 keep-alive(保持连接)或 close(关闭连接)。Connection: keep-aliveConnection: close
Cache-Control控制缓存机制,定义客户端或服务器如何缓存响应。Cache-Control: no-cacheCache-Control: max-age=3600
Accept-Language指定客户端能接受的语言,服务器根据此返回相应语言的内容。Accept-Language: en-US,en;q=0.9
Referer指定请求来源页面,通常用于追踪来源网站,防止 CSRF 攻击。Referer: https://www.example.com/page1
X-Requested-With通常用于 AJAX 请求,指示请求是由 JavaScript 发起的。X-Requested-With: XMLHttpRequest
If-None-Match用于缓存控制,结合 ETag 使用,表示仅当目标资源的 ETag 不匹配时,才返回新内容。If-None-Match: "abc123"
If-Modified-Since用于缓存控制,表示仅当目标资源自指定时间后有修改时,才返回新内容。If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT
Range请求部分资源,通常用于下载大文件时指定下载范围。Range: bytes=0-1023
TE指定客户端支持的传输编码方式,常用于 Transfer-EncodingTE: trailers, deflate
Upgrade-Insecure-Requests表示客户端支持从 HTTP 升级到 HTTPS 请求,通常由浏览器发送。Upgrade-Insecure-Requests: 1
PragmaCache-Control 类似,指定缓存策略,主要用于 HTTP/1.0 请求。Pragma: no-cache
Max-Forwards限制代理服务器在转发请求时的最大跳数,通常用于 TRACEOPTIONS 请求。Max-Forwards: 10
Content-Length指定请求体的长度,单位是字节。Content-Length: 1234

十.总结

在目前前后端分离的环境下HTTP实在太频繁!但是大家可能常见的是前端HTTP请求,其实后端请求也有不少应用场景,我对开发的理解是不局限于任何一门语言,学的知识越多解决的问题越多,这是肯定!不要抱着老的思想去解决问题。。能解决的范围很窄。。

就比如很古老的基于数据库开发!我尼玛,你们见过数据库也能发送HTTP请求么?我见过。简直目瞪口呆。

创作整理不易,请大家多多关注 多多点赞,有写的不对的地方欢迎大家补充,我来整理,再次感谢!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打造移动友好网站:UI设计的自适应技巧

随着移动互联网的快速发展&#xff0c;手机已成为人们获取信息的主要渠道之一。对于UI设计师而言&#xff0c;打造一个能够自适应手机屏幕的网站变得尤为重要。这不仅能够提升用户体验&#xff0c;还能在搜索引擎优化&#xff08;SEO&#xff09;中占据优势。以下是实现UI设计网…

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

STM32问题集

这里写目录标题 一、烧录1、 Can not connect to target!【ST-LINK烧录】 一、烧录 1、 Can not connect to target!【ST-LINK烧录】 烧录突然 If the target is in low power mode, please enable “Debug in Low Power mode” option from Target->settings menu 然后就&…

正点原子IMX6ULL--嵌入式Linux开发板学习中常用命令和笔记记录

学习路线图 传驱动文件 sudo cp chrdevbase.ko chrdevbaseApp /home/txj/linux/nfs/rootfs/lib/modules/4.1.15/ -f bootcmd setenv bootcmd tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000 setenv bootcmd tftp 80800000 zImag…

29.电影院售票系统(基于springboot和vue的Java项目)

目录 1.系统的受众说明 2 论文背景 2.1 国内研究现状&#xff1a; 2.2 国外研究现状&#xff1a; ​​​​​​​2.3 所用技术 3 系统需求分析 ​​​​​​​3.1 需求分析 ​​​​​​​3.2 可行性分析 3.2.1技术可行性分析 3.2.2市场可行性分析 3.2.3经济可…

(一)<江科大STM32>——软件环境搭建+新建工程步骤

一、软件环境搭建 &#xff08;1&#xff09;安装 Keil5 MDK 文件路径&#xff1a;江科大stm32入门教程资料/Keil5 MDK/MDK524a.EXE&#xff0c;安装即可&#xff0c;路径不能有中文。 &#xff08;2&#xff09;安装器件支持包 文件路径&#xff1a;江科大stm32入门教程资料…

热点更新场景,OceanBase如何实现性能优化

案例背景 这个案例来自一个保险行业的客户&#xff1a;他们的核心系统底层采用了OceanBase数据库作为存储解决方案&#xff0c;然而&#xff0c;在系统上线运行后&#xff0c;出现了一个异常情况&#xff0c;执行简单的主键更新语句时SQL执行时间出现了显著的波动。为了迅速定…

从0开始学习机器学习--Day24--核函数

核函数(Kernelsl function) 非线性数据的决策边界 对于非线性问题来说&#xff0c;决策边界在很多时候都是曲线&#xff0c;需要我们在假设函数中加入高阶多项式来拟合原始数据&#xff0c;这对于算法来说需要很长的运行时间去计算这些高阶多项式&#xff0c;那么有没有更高效…

Unity学习笔记(4):人物和基本组件

文章目录 前言开发环境新增角色添加组件RigidBody 2D全局项目设置Edit 给地图添加碰撞体 总结 前言 今天不加班&#xff0c;有空闲时间。争取一天学一课&#xff0c;养成习惯 开发环境 Unity 6windows 11vs studio 2022Unity2022.2 最新教程《勇士传说》入门到进阶&#xff…

【C++】字符串相乘

1.题目 2.代码 介绍一种比较简单的方法&#xff0c;就是先将字符串逆序&#xff0c;然后取出其中每一位的数相乘、相加。最后再考虑进位问题。 class Solution { public:string multiply(string num1, string num2) {//先排除边界情况&#xff0c;防止输出"00000...&quo…

Pycharm PyQt5 环境搭建创建第一个Hello程序

第一步: 创建Pycharm项目,下载包: pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/下载好了之后,可以看到相应包: PyQt5:PyQt5是一套Python绑定Digia QT5应用的框架。Qt库是最…

新手小白学习docker第六弹------Docker常规安装(安装tomcat、mysql、redis)

目录 1 总体步骤2 安装tomcat2.1 搜索镜像2.2 拉取镜像2.3 查看镜像2.4 启动镜像2.5 访问猫首页 3 安装mysql3.1 搜索镜像3.2 拉取镜像3.3 启动镜像 4 安装redis4.1 拉取镜像4.2 启动镜像&#xff08;法1基础版&#xff09;4.3 配置文件4.3.1 在宿主机下新建目录 /app/redis4.3…

python基础大杂烩

命令提示符程序&#xff0c;输入python&#xff0c;运行python程序 代码通过解释器程序翻译给计算机去执行 命令提示符输入的python本质上就是调用D:/dev/python/python3.12.5/python.exe这个解释器程序 有python程序将输入的代码翻译成二进制的0和1&#xff0c;去向计算机去运…

【数字图像处理+MATLAB】对图片进行伽马校正(Gamma Correction):使用幂律变换公式进行伽马变换

引言 伽马校正&#xff08;Gamma Correction&#xff09;是一种用于图像处理的技术&#xff0c;主要用于调整图像的亮度或对比度。其基本原理是对图像的每一个像素应用一个非线性变换&#xff0c;以更好地适应人眼的视觉感知。在数字图像处理中&#xff0c;伽马校正通常用于调…

Golang | Leetcode Golang题解之第553题最优除法

题目&#xff1a; 题解&#xff1a; func optimalDivision(nums []int) string {n : len(nums)if n 1 {return strconv.Itoa(nums[0])}if n 2 {return fmt.Sprintf("%d/%d", nums[0], nums[1])}ans : &strings.Builder{}ans.WriteString(fmt.Sprintf("%d…

基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路

一、项目概述 随着电动车的普及&#xff0c;充电桩作为关键基础设施&#xff0c;其智能化、网络化管理显得尤为重要。本项目旨在基于STM32微控制器开发一款智能充电桩&#xff0c;能够实现高效的充电监控与管理。项目通过物联网技术&#xff0c;提供实时数据监测、远程管理、用…

性能高于Transformer模型1.7-2倍,彩云科技发布基于DCFormer架构通用大模型云锦天章

2017年&#xff0c;谷歌发布《Attention Is All You Need》论文&#xff0c;首次提出Transformer架构&#xff0c;掀开了人工智能自然语言处理&#xff08;NLP&#xff09;领域发展的全新篇章。Transformer架构作为神经网络学习中最重要的架构&#xff0c;成为后来席卷全球的一…

黄仁勋:AI革命将创百万亿美元价值!近屿智能带你入局AIGC

11月13日&#xff0c;NVIDIA在日本成功举办了2024年AI峰会。一场关于人工智能驱动的新工业革命的讨论热烈展开。英伟达创始人兼CEO黄仁勋与软银主席兼CEO孙正义共同探讨了当前技术革命的独特之处及其深远影响。 黄仁勋在会上表示&#xff0c;AI革命将创造的价值不是以万亿美元计…

大数据面试题--kafka夺命连环问(后10问)

目录 16、kafka是如何做到高效读写&#xff1f; 17、Kafka集群中数据的存储是按照什么方式存储的&#xff1f; 18、kafka中是如何快速定位到一个offset的。 19、简述kafka中的数据清理策略。 20、消费者组和分区数之间的关系是怎样的&#xff1f; 21、kafka如何知道哪个消…

Vue2:组件

Vue2&#xff1a;组件 非单文件组件定义注册使用 单文件组件 组件是Vue中最核心的内容&#xff0c;在编写页面时&#xff0c;将整个页面视为一个个组件&#xff0c;再把组件拼接起来&#xff0c;这样每个组件之间相互独立&#xff0c;有自己的结构样式&#xff0c;使页面编写思…