python3.8 requests防止自动urlencode/decode

近期在项目中需要python requests发送uri中包含.%2e的请求,发现requests库会自动decode,谷歌百度没有很好的使用方法。也不想通过修改源码方式解决。
1.修改源码
涉及两处,requests涉及两处,自身一处,使用的urlib3一处

urlib3/util/url.py parse_url 函数中,对path和参数进行了encode,注释 在这里插入图片描述
requests models.py 441行,对path进行了处理,注释
在这里插入图片描述
2.继承requests.Session
https://cloud.tencent.com/developer/article/1394648

3.patch
修改源码觉得不通用,不愿接受;继承session改动太大,所以决定patch方式
主要修改两个点

def urldecode_patch():
    def uuuu(url, allowed_chars, encoding="utf-8"):
        return url
    import urllib3
    import requests
    requests.utils.UNRESERVED_SET = ''
    urllib3.util.url._encode_invalid_chars = uuuu
urldecode_patch()

requests.utils.UNRESERVED_SET ,源码中原值如下图
在这里插入图片描述
调用如下,如果decode值为UNRESERVED_SET中的值,就decode;比如.%2e 将会变为 …
在这里插入图片描述
urllib3.util.url._encode_invalid_chars
此处修改,因为urlib3对%2e进行了一次大写转换
在这里插入图片描述
使用效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值