python请求:没有编码的网址

时间:2018-04-21 11:53:57

标签: python amazon-s3 python-requests pre-signed-url

我知道请求库在内部编码类似于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吗?

1 个答案:

答案 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.")