谷歌云签名url“;“签名不匹配”;当使用PostMan时,但可以与Python配合使用

谷歌云签名url“;“签名不匹配”;当使用PostMan时,但可以与Python配合使用,python,google-cloud-storage,postman,pre-signed-url,Python,Google Cloud Storage,Postman,Pre Signed Url,嗨,我已经生成了一个签名的url上传到谷歌云存储桶,但当我尝试放置时,我得到了SignatureDesNotMatch,奇怪的是只有邮递员。当我在Python中尝试相同的Url、查询参数和标题时,我能够很好地上传 这是我在邮递员那里试过的请求 网址:****-171020.appspot.com/swift.txt?GoogleAccessId=storageadmin@****-171020.iam.gserviceaccount.com&Expires=1503755879&Signatur

嗨,我已经生成了一个签名的url上传到谷歌云存储桶,但当我尝试放置时,我得到了SignatureDesNotMatch,奇怪的是只有邮递员。当我在Python中尝试相同的Url、查询参数和标题时,我能够很好地上传

这是我在邮递员那里试过的请求

网址:****-171020.appspot.com/swift.txt?GoogleAccessId=storageadmin@****-171020.iam.gserviceaccount.com&Expires=1503755879&Signature=tlcHVRwbvMSxaIB6oO/TDXRDczXGFSE6ZXHmZbtCUMhjpos36/1kdkv7lbmm7xtksq42fnksuizlyampkg8ambuydeojd+kvblxk+ax28xvvf5aq/vjrpggy0ien+byjwjwjjjjjjjjjzzz7k4k2nnifjjjjjjzzzzzz7kv7k2jz7kv8kj+czzzz7kzzzzzz7kj0UQBOYC1O4GCA6OPASWMR840A+II4HqkeOWcv7PiHEPdw/sgH3PR+TKGMJTAD9F8H6ZJIFAT8DLBTSL7T3IAUM7FVTC9PGQT6KT0QUM9Z3xFPEJP8OSTA==

标题: 内容-MD5:7QDIH1MUHJZEHB6SV8UNGA== 内容类型:文本/纯文本

下面是一个有效的Python程序:

import requests

url = "https://storage.googleapis.com/****-171020.appspot.com/swift.txt"
querystring = {'GoogleAccessId':'storageadmin@****-171020.iam.gserviceaccount.com', 'Expires':'1503755879', 'Signature':'tlcHVRwbvMSxaIB6oO/TDXRDczXGFSE6ZXHmZbtCUMhjpos36/1KdKV7Lbmm7XtKsq42SFNksUIZLplyAMpkG8aMBuydeoJd+kvebLxK2k+AX8Xr2VVf5Aq/vVJrPGGYGD0iEN+bY264NIFbyJnlm0pthCVGtB5YqZJadCFDwPFWqi04312Jzzen1CXDY+saY0BabmXaZeCzINz7kV+aq0AJoS8taW0uqboYc1o4gCA6OPAswMr1E840a+II4HqkeOWcv7PiHEPdw/sgH3PR+TkGmjTAd9f8H6zJIFaT8DLbtsl7t3iAUM7Fvdtc9pGQt6KT0qUm9z3XfPEjP8OsTA=='}
payload = "Hello World!"
headers = {'Content-MD5': '7Qdih1MuhjZehB6Sv8UNjA==', 'Content-Type':'text/plain'}

response = requests.request("PUT", url, data=payload, headers=headers, params=querystring)

print(response.text)

请帮我了解这里发生了什么。谢谢

查询字符串中的键和值需要进行uri编码。您获得“SignatureDesNotMatch”的原因是,在接收端,他们正在对您提供的内容进行uri解码,希望它是uri编码的,并且由于您提供的内容没有编码,因此解码会产生不同的签名

有关保留字符,请参见此链接:

帮助您编码查询字符串的在线工具:


python代码工作的原因是请求库自动对查询字符串参数进行uri编码。

我认为您的问题在于如何在postman中定义标题。尝试用实际的键和值替换“键”和“值”。例如:{“Content-MD5”:“7Qdih1MuhjZehB6Sv8UNjA==”}而不是{“key”:“Content-MD5”…}@AllenMoh这正是postman在我尝试复制时添加到剪贴板的方式,编辑以避免混淆。你如何在python中签名?谢谢Allen,是的,编码是区别,解决了它。:)