文章插图
1 背景
上篇文章讲解了 requests 模块的基础使用 , 其中有 get、put、post 等多种请求方式 , 使用 data、json 等格式做为请求参数 , 在请求体中添加请求头部信息的常见信息 , 如:headers、cookies , 以及对请求响应的处理方法 。接下来讲解一下 requests 的高级用法 。
2 进阶方法举例
2.1 requests.request()
method:提交方式(get|post);
url:提交地址;
kwargs:14 个控制访问的参数;
文章插图
常用的参数有:params、data、json、headers、cookies , 已在上篇文章中介绍过了 , 感兴趣的朋友 , 可以到上篇文章再回顾一下 。以下将讲解与示例其他参数的使用 。
示例:
2.1.1 files
请求携带文件 , 如果有的请求需要上传文件 , 可以用它来实现 。
import requests
# 上传文件
f= {"files": open("favicon.ico", "rb") }
data = https://www.isolves.com/it/wl/zs/2023-06-28/{"name": "上传文件"}
requests.request(
method = 'POST',
url = 'http://127.0.0.1:8080/example/request',
data = https://www.isolves.com/it/wl/zs/2023-06-28/data,
files = f
需注意:favicon.ico 文件需和当前脚本在同一目录下 , 如果不在 , 可以将文件名称修改为文件路径
import requests
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
# 1、Basic Auth认证
res = requests.request(
method = 'GET',
url = 'http://127.0.0.1:8080/example/request',
auth = HTTPBasicAuth("username", "password")
res.encoding = "gbk"
print(res.status) # 200
# 2、DIGEST 认证
res = requests.request(
method = 'GET',
url = 'http://127.0.0.1:8080/example/request',
auth = HTTPDigestAuth("username", "password")
res.encoding = "gbk"
print(res.status) # 200
http auth 认证的两种方式 , 分别为 Basic 方式和 Digest 认证 , 其中:Basic Auth 的优点是提供简单的用户验证功能 , 其认证过程简单明了 , 适合于对安全性要求不高的系统或设备中;同样存在缺点:输入的用户名 , 密码 编码后会出现在 Authorization 里 , 很容易被解析出来 。
那么 Digest 对比 Basic 认证有什么不同呢?
- Digest 思想 , 是使用一种随机数字符串 , 双方约定好对哪些信息进行哈希运算 , 即可完成双方身份的验证 。Digest 模式避免了密码在网络上明文传输 , 提高了安全性 , 但它依然存在缺点 , 例如认证报文被攻击者拦截到攻击者可以获取到资源 。
- DIGEST 认证提供了高于 BASIC 认证的安全等级 , 但是和 HTTPS 的客户端认证相比仍旧很弱 。
- DIGEST 认证提供防止密码被窃听的保护机制 , 但并不存在防止用户伪装的保护机制 。
- DIGEST 认证和 BASIC 认证一样 , 使用上不那么便捷灵活 , 且仍达不到多数 Web 网站对高度安全等级的追求标准 。因此它的适用范围也有所受限 。
请求和响应的超时时间 , 在网络响应延迟或者无响应时 , 可以通过设置超时时间 , 避免等待 。
import requests
# 设置请求超时1秒 , 1秒后无响应 , 将抛出异常 , 1秒为connect和read时间总和
requests.request(
method = 'POST',
url = 'http://127.0.0.1:8080/example/request',
json = {'k1' : 'v1', 'k2' : 'v2'},
timeout = 1
# 分别设置connect和read的超时时间 , 传入一个数组
requests.request(
method = 'POST',
url = 'http://127.0.0.1:8080/example/request',
json = {'k1' : 'v1', 'k2' : 'v2'},
timeout = (5, 15)
# 永久等待
requests.request(
method = 'POST',
url = 'http://127.0.0.1:8080/example/request',
json = {'k1' : 'v1', 'k2' : 'v2'},
timeout = None
# 或者删除timeout参数
# 捕捉超时异常
from requests.exceptions import ReadTimeout
try:
res = requests.get('http://127.0.0.1:8080/example/request', timeout=0.1)
推荐阅读
- http与https的概念与区别
- 澳工电动三轮车怎么样
- io设备错误无法运行此项请求 io设备错误
- Firefox 114 现已可用 启用WebTransport并继续 DNS Over HTTPS工作
- 腮红|想到你就脸红 见你不用腮红 <img src=https://mparticle.uc.cn/api/http
- go语言中经常犯的错误
- node http请求
- C#控制台程序如何创建不需要IIS托管的HTTP Rest API
- |已故女王协助拍摄短片 拒绝再拍一次的请求
- 保罗|那不勒斯管理层已经批准了李康仁的招聘请求