2017-08-25 50 views
1

您好我已经生成了一个签名的url上传到谷歌云存储桶,但是当我尝试PUT时,我只能用PostMan获得SignatureDoesNotMatch。当我尝试使用Python中的相同Url,queryParams,Headers时,我能够正常上传。使用PostMan的Google Cloud签名url“SignatureDoesNotMatch”,但使用Python工作正常

这里是我的邮差试图请求

网址:https://storage.googleapis.com/ ****-171020.appspot.com/[email protected]****-171020.iam.gserviceaccount.com &过期= 1503755879 &签名= tlcHVRwbvMSxaIB6oO/TDXRDczXGFSE6ZXHmZbtCUMhjpos36/1KdKV7Lbmm7XtKsq42SFNksUIZLplyAMpkG8aMBuydeoJd + kvebLxK2k + AX8Xr2VVf5Aq/vVJrPGGYGD0iEN + bY264NIFbyJnlm0pthCVGtB5YqZJadCFDwPFWqi04312Jzzen1CXDY + saY0BabmXaZeCzINz7kV + aq0AJoS8taW0uqboYc1o4gCA6OPAswMr1E840a + II4HqkeOWcv7PiHEPdw/sgH3PR + TkGmjTAd9f8H6zJIFaT8DLbtsl7t3iAUM7Fvdtc9pGQt6KT0qUm9z3XfPEjP8OsTA ==

接头: 内容-MD5:7Qdih1MuhjZehB6Sv8UNjA == 的Content-Type:text/plain的

这里是Python程序的作品:

import requests 

url = "https://storage.googleapis.com/****-171020.appspot.com/swift.txt" 
querystring = {'GoogleAccessId':'[email protected]****-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) 

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

+0

我相信你的问题是你如何在邮递员中定义你的邮件头。尝试用实际的键和值替换“键”和“值”。例如:{“Content-MD5”:“7Qdih1MuhjZehB6Sv8UNjA ==”}而不是{“key”:“Content-MD5”...} – AllenMoh

+0

@AllenMoh这就是邮递员添加到剪贴板的方式,当我尝试复制,编辑以避免混乱。 – Aster

回答

2

查询字符串中的键和值需要进行uri编码。你得到一个“SignatureDoesNotMatch”的原因是,在接收端他们正在解码你提供的内容,期望它是uri编码的,并且由于你提供的内容没有被编码,所以解码产生不同的签名。

请参阅此链接保留字符: https://tools.ietf.org/html/rfc2396#section-2

在线工具,帮助您编码您的查询字符串: http://www.url-encode-decode.com/

你的Python代码工作的原因,就是请求库自动URI编码查询字符串参数。

+1

感谢艾伦,是的编码是不同的,它修复了它。 :) – Aster

相关问题