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

news2024/11/23 14:52:06

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请求么?我见过。简直目瞪口呆。

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

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

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

相关文章

SpringMVC案例学习(一)--计算器设计登录页面设计

文章目录 1.计算器1.1.html代码1.2接口设计1.3前端测试1.4接口测试 2.登录页面设计2.1接口实现2.2查看前端页面效果2.3未进行前后端交互时候的代码2.4前后端交互设计2.5个人实践遇到的问题 3.lombok介绍3.1插件安装3.2导入依赖 1.计算器 1.1.html代码 下面的这个就是我们的前…

【Linux 麒麟系统 qt 程序通过root启动 桌面程序】

通过.desktop pkexec 启动程序 关键字方案一方案二第一步 修改.desktop第二步 xxx.sh实现 注意 关键字 pkexec .desktop qt 原始需求&#xff1a; 用户在麒麟系统上通过快捷方式(.desktop)启动程序后绑定系统的26端口&#xff0c;但是因为系统权限问题&#xff0c;26端口普通…

DevOps-Gitlab-私有代码仓库

1. 概述 1. 私有代码仓库 2. 精细化权限配置,让系统更安全 3. 控制用户/用户组是否可以提交到主分支 (PR Push Request) 4. 它使用Ruby语言写成。后来&#xff0c;一些部分用Go语言重写 2. Gitlab vs Github/Gitee GitlabGithub/Gitee共同点存放代码,git访问存放代码,git访问…

【AI声音克隆整合包及教程】第二代GPT-SoVITS V2:技术、应用与伦理思考

一、引言 在当今科技迅速发展的时代&#xff0c;声音克隆技术成为人工智能领域的一个备受瞩目的分支。GPT-SoVITS V2作为一种声音克隆工具&#xff0c;正逐渐进入人们的视野&#xff0c;它在多个领域展现出巨大的潜力&#xff0c;同时也引发了一系列值得深入探讨的问题。本文旨…

重新认识HTTPS

一. 什么是 HTTPS HTTP 由于是明文传输&#xff0c;所谓的明文&#xff0c;就是说客户端与服务端通信的信息都是肉眼可见的&#xff0c;随意使用一个抓包工具都可以截获通信的内容。 所以安全上存在以下三个风险&#xff1a; 窃听风险&#xff0c;比如通信链路上可以获取通信…

Vite初始化Vue3+Typescrpt项目

初始化项目 安装 Vite 首先&#xff0c;确保你的 Node.js 版本 > 12.0.0。然后在命令行中运行以下命令来创建一个 Vite Vue 3 TypeScript 的项目模板&#xff1a; npm init vitelatest进入项目目录 创建完成后&#xff0c;进入项目目录&#xff1a; cd vue3-demo启动…

Three.js 搭建3D隧道监测

Three.js 搭建3D隧道监测 Three.js 基础元素场景scene相机carema网络模型Mesh光源light渲染器renderer控制器controls 实现3d隧道监测基础实现道路实现隧道实现多个摄像头点击模型进行属性操作实现点击模型发光效果 性能监视器stats引入使用 总结完整代码 我们将通过three.js技…

【学术会议介绍,SPIE 出版】第四届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2024,12月13-15日)

第四届计算机图形学、人工智能与数据处理国际学术会议 2024 4th International Conference on Computer Graphics, Artificial Intelligence and Data Processing (ICCAID 2024) 重要信息 大会官网&#xff1a;www.iccaid.net 大会时间&#xff1a;2024年12月13-15日 大会地…

VScode C++配置opencv4.5.3——先赞后看,配置成功实属不易-(镜像加速环境w版和配置文件版)

前置准备&#xff1a;配置MinGW和CMake 手把手教——class1_VScode配置C环境_linux vscode cpp配置-CSDN博客文章浏览阅读398次&#xff0c;点赞4次&#xff0c;收藏6次。点击Windows x64 Installer:下载msi文件 安装完成后验证。配置gcc文件下bin环境。最后ctrlF5运行尝试。W…

机器学习 笔记

特征值提取 字典 from sklearn.extaction import DictVectorizer mDictVectorizer(sparseFalse)#sparse是否转换成三元组形式 data[], #传入字典数据 data1model.fit_transform(data) #使用API 英文特征值提取 from sklearn.feature_extraction.text import CountVe…

推荐一款好用的postman替代工具2024

Apifox 是国内团队自主研发的 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台&#xff0c;是非常好的一款 postman 替代工具。 它通过一套系统、一份数据&#xff0c;解决多个系统之间的数据同步问题。只要定义好接口文档&#xff0c;接口调试、数据 Mock、接口…

项目模块十七:HttpServer模块

一、项目模块设计思路 目的&#xff1a;实现HTTP服务器搭建 思想&#xff1a;设计请求路由表&#xff0c;记录请求方法与对应业务的处理函数映射关系。用户实现请求方法和处理函数添加到路由表&#xff0c;服务器只接受请求并调用用户的处理函数即可。 处理流程&#xff1a; …

Android音视频直播低延迟探究之:WLAN低延迟模式

Android WLAN低延迟模式 Android WLAN低延迟模式是 Android 10 引入的一种功能&#xff0c;允许对延迟敏感的应用将 Wi-Fi 配置为低延迟模式&#xff0c;以减少网络延迟&#xff0c;启动条件如下&#xff1a; Wi-Fi 已启用且设备可以访问互联网。应用已创建并获得 Wi-Fi 锁&a…

requests库如何处理 - POST请求常见的两种请求体格式:表单格式JSON格式

目录&#xff1a; 每篇前言&#xff1a;一、POST请求的两种常见请求体格式详解1. 表单格式&#xff08;form-encoded&#xff09; - 举例&#xff1a;福州搜索示例代码&#xff08;表单数据&#xff09;&#xff1a; 2. JSON格式 - 举例&#xff1a;CSDN搜索示例代码&#xff0…

HCIP-HarmonyOS Application Developer 习题(二十二)

1、用户将手机导航迁移至智能手表之后&#xff0c;智能手表如果需要获取手机传过来的数据&#xff0c;从下列哪个方法中获取? A、onCompleteContinuation() B、onStartContinuation() C、onRestoreData() D、onSaveData() 答案&#xff1a;C 分析&#xff1a;FA发起迁移后&am…

LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略

LLMs之Code&#xff1a;Github Spark的简介、安装和使用方法、案例应用之详细攻略 目录 Github Spark的简介 Github Spark的安装和使用方法 1、安装 2、使用方法 Github Spark的案例应用 Github Spark的简介 2024年10月30日&#xff0c;GitHub 重磅发布GitHub Spark 是一…

会议直击|美格智能受邀出席第三届无锡智能网联汽车生态大会,共筑汽车产业新质生产力

11月10日&#xff0c;2024世界物联网博览会分论坛——第三届无锡智能网联汽车生态大会在无锡举行&#xff0c;美格智能CEO杜国彬受邀出席&#xff0c;并参与“中央域控&#xff1a;重塑汽车智能架构的未来”主题圆桌论坛讨论&#xff0c;与行业伙伴共同探讨智能网联汽车产业领域…

HMSC联合物种分布模型在群落生态学中的贝叶斯统计分析

联合物种分布模型&#xff08;Joint Species Distribution Modelling&#xff0c;JSDM&#xff09;在生态学领域&#xff0c;特别是群落生态学中发展最为迅速&#xff0c;它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…

【AI技术对电商的影响】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python酷库之旅-第三方库Pandas(211)

目录 一、用法精讲 986、pandas.MultiIndex.get_loc方法 986-1、语法 986-2、参数 986-3、功能 986-4、返回值 986-5、说明 986-6、用法 986-6-1、数据准备 986-6-2、代码示例 986-6-3、结果输出 987、pandas.MultiIndex.get_locs方法 987-1、语法 987-2、参数 …