我知道请求库在内部编码类似于urllib.parse.quote()的URL。之前,这曾经在config = {' encode_uri':False}的请求中进行配置,但此配置已停止。
我需要添加一个包含签名的AWS S3预先签名的URL。当我对收到的URL使用requests.put()时,我会使用SignatureDoesNotMatch获得403响应。
给予requests.put()的URL的签名部分是
了Bf%2BBufRIxITziSJGuAq9cYFbxBM%3D
服务器将其视为:
了Bf + BufRIxITziSJGuAq9cYFbxBM =
这是否与编码URL的请求库相关,并且可能如上所述转换签名部分?如果是这样,那么无论如何都要阻止它并让它使用传递的URL吗?
答案 0 :(得分:1)
覆盖编码功能
import requests, urllib
class NoQuotedCommasSession(requests.Session):
def send(self, *a, **kw):
# a[0] is prepared request
a[0].url = a[0].url.replace(urllib.quote(","), ",")
return requests.Session.send(self, *a, **kw)
s = NoQuotedCommasSession()
s.get("http://somesite.com/an,url,with,commas,that,won't,be,encoded.")