Python发送digest认证的请求:requests.auth.HTTPDigestAuth/httpx.DigestAuth

近日在做摄像头接口的调试,需要用到Digest认证,经过试验,代码如下:

一、同步版(pip install requests)

import requests
from requests.auth import HTTPDigestAuthhost = 'https://192.168.0.2'
path = '/api/xxx'
path2 = '/another/api'AUTH = ('username', 'password')
r = requests.get(host+path, verify=False, auth=HTTPDigestAuth(*AUTH))
print(r.status_code)
print(r.text)payload = {'a': 1}
r2 = requests.put(host+path2, verify=False, auth=HTTPDigestAuth(*AUTH), json=payload)
print(r2.status_code)
print(r2.json())

二、异步协程版(pip install httpx)

import asyncio
from httpx import AsyncClient, DigestAuthhost = 'https://192.168.0.2'
path = '/api/xxx'
path2 = '/another/api'AUTH = ('username', 'password')async def main():async with AsyncClient(base_url=host, verify=False, auth=DigestAuth(*AUTH)):r = await client.get(path)payload = {'a': 1}r2 = await client.put(path2, json=payload)print(r.status_code)print(r.text)print(r2.status_code)print(r2.json())if __name__ == '__main__':asyncio.run(main())

封装成工具类之后的代码如下

import osimport requests
from httpx import AsyncClient, DigestAuthAUTH = (os.environ["API_USER"], os.environ["API_PASS"])class HttpClient:PATH_GET = "/get-sth"PATH_PUT = "/put"@staticmethoddef sync_request(method: str, host: str, path: str, **kw) -> requests.Response:url = host.rstrip("/") + pathreturn requests.request(method, url, verify=False, auth=requests.auth.HTTPDigestAuth(*AUTH), **kw)@classmethoddef sync_get(cls, host: str, params=None, path: str | None = None) -> dict:if path is None:path = cls.PATH_GETr = cls.sync_request("GET", host, path, params=params)r.raise_for_status()return r.json()@classmethoddef sync_put(cls, payload: dict, host: str, path: str | None = None) -> dict:if path is None:path = cls.PATH_PUTr = cls.sync_request("PUT", host, path, json=payload)r.raise_for_status()return r.json()@staticmethoddef async_client(host: str) -> AsyncClient:return AsyncClient(base_url=host, verify=False, auth=DigestAuth(*AUTH))@classmethodasync def get(cls, host: str, params=None, path: str | None = None) -> dict:async with cls.async_client(host) as client:r = await client.get(path or cls.PATH_GET, params=params)return r.json()@classmethodasync def put(cls, payload: dict, host: str, path: str | None = None) -> dict:async with cls.async_client(host) as client:r = await client.put(path or cls.PATH_PUT, json=payload)return r.json()

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

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

相关文章

贪心算法、回溯算法和动态规划 解决问题思路分析

贪心算法(Greedy Algorithm)、回溯算法(Backtracking Algorithm)和动态规划(Dynamic Programming)是三种常见的解决问题的算法,它们之间有着明显的区别: 决策方式 贪心算法&#x…

【开发工具】pythontutor——在线内存可视化工具

笔者在学习RISC-V时,希望找到一款可视化的内存工具,遗憾目前还未找到。发现了pythontutor这个网站,可以对C、python等多种语言进行内存可视化。结果似乎是x86架构的,符合小端存储。 贴一下网址,原准备依据开源版本进行…

React配置@别名路径配置

1. 背景知识 路径解析配置(webpack),把 / 解析为 src/路径联想配置(VsCode),VsCode 在输入 / 时,自动联想出来对应的 src/下的子级目录 2. 路径解析配置 配置步骤: 安装craco npm …

windows平台安装labelme

之前写过一篇文章也是关于在windows平台安装labelme的:《windows平台python版labelme安装与使用_labelme下载-CSDN博客》,随着软件与工具的更新换代,按照同样的方法最近在使用的时候出现了错误,出现创建虚拟环境失败,具…

Springboot+Vue项目-基于Java+MySQL的校园外卖服务系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

无人机+低空经济:释放中国低空经济动力的必要条件

无人机与低空经济的结合,对于释放中国低空经济动力具有重要的意义。无人机作为低空经济的重要组成部分,可以为低空经济提供新的动力和发展方向。以下是无人机与低空经济结合释放中国低空经济动力的必要条件: 1. 无人机技术的不断发展和创新&a…

ception: Failed to execute ‘open‘ on ‘XMLHttpRequest‘: Invalid URL

ception: Failed to execute ‘open’ on ‘XMLHttpRequest’: Invalid URL at http://159.226.158.125:8008/static/js/vendor.c59f323a0c8fa195b048.js:7:113819 检查请求链接是否是完整无误 api.js内容: const application {add: generalApplicationService/…

日期格式化转换

方式一:浏览器console里面跑一下,可以知道具体的时间点 decodeURIComponent(‘2024-04-30%2009%3A50%3A00’) 或者使用在线工具转换 https://www.sojson.com/encodeurl.html

最小K个数(力扣面试题17.14)

本文采用的是大堆排序求最小的K个值。需要有堆的数据结构基础哦。 代码展示: /*** Note: The returned array must be malloced, assume caller calls free().*/ void AdjustDown(int* parr,int n,int root)//向下调整 {int parentroot;int child parent*21;while…

xLua热更新解决方案

图中灰色的无法实现热更新,而Lua代码可以打包成AB包,并上传到资源服务器, 当进入游戏检测是否有资源需要更新,需要则会从资源服务器下载。 学习目标 1.导入xLua框架 2.C#调用Lua 3.Lua调用C# 4.xLua热补丁 xLua框架导入和AB…

Bert基础(二十)--Bert实战:机器阅读理解任务

一、机器阅读理解任务 1.1 概念理解 机器阅读理解(Machine Reading Comprehension, MRC)就是给定一篇文章,以及基于文章的一个问题,让机器在阅读文章后对问题进行作答。 在机器阅读理解领域,模型的核心能力体现在对…

(商汤商量、通义、AI Gear、腾讯混元、ChatMindAI)分享好用的ChatGPT

目录 1、商汤商量语言大模型 2、通义 3、AI Gear 4、腾讯混元

Flink checkpoint 源码分析

序言 最近因为工作需要在阅读flink checkpoint处理机制,学习的过程中记录下来,并分享给大家。也算是学习并记录。 目前公司使用的flink版本为1.11。因此以下的分析都是基于1.11版本来的。 在分享前可以简单对flink checkpoint机制做一个大致的了解。 …

《ElementPlus 与 ElementUI 差异集合》el-dialog 显示属性有差异

ElementPlus 用属性 v-model ElementUI 用属性 visible 其实也是 Vue2/Vue3 的差异:v-model 指令在组件上的使用已经被重新设计,替换掉了 v-bind.sync

JENKINS 安装,学习运维从这里开始

Download and deployJenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their softwarehttps://www.jenkins.io/download/首先点击上面。下载Jenkins 为了学习,从windows开始&#x…

UNIXRTC

这段代码是将写入的数据显示在OLED屏幕上,并进行读取。起初上电的时候可以发现W:后面为空,R:为0000 0000这是因为还没开始写入。按下按键后发现变换的数据是1235 5679,与我们写入的1234 5678不同,这是因为写入之前执行…

Python读MCU串口

将Jupyter Notebook(.ipynb)文件转换为Python(.py)文件的3种方法_python_脚本之家 #!/usr/bin/env python # coding: utf-8# In[ ]:import sys import serial import threading from datetime import datetimeinput_flag 0class UART(object):def __init__(self,port,baud): #…

preg_match详解(反向引用和捕获组)

在讲preg_match函数之前,我们先了解一下什么是php可变变量 php可变变量 在PHP中双引号包裹的字符串中可以解析变量,而单引号则不行 也就是在php中,双引号里面如果包含有变量,php解释器会将其替换为变量解释后的结果&#xff1b…

AI系列:大语言模型的RAG(检索增强生成)技术(上)

前言 大型语言模型(LLM)虽然在生成文本方面表现出色,但仍然存在一些局限性:数据是静态的,而且缺乏垂直细分领域的知识。为了克服这些限制,有时候会进行进一步的模型训练和微调。在实际应用中,我…

基于深度学习检测恶意流量识别框架(80+特征/99%识别率)

基于深度学习检测恶意流量识别框架 目录 基于深度学习检测恶意流量识别框架简要示例a.检测攻击类别b.模型训练结果输出参数c.前端检测页面d.前端训练界面e.前端审计界面(后续更新了)f.前端自学习界面(自学习模式转换)f1.自学习模式…