您好我已经生成了一个签名的网址上传到谷歌云桶,但是当我尝试PUT时,我得到了SignatureDoesNotMatch,奇怪的是只有PostMan。当我尝试使用相同的Url,queryParams,Python中的标题时,我能够正常上传。
以下是我在PostMan中尝试的请求
url:https://storage.googleapis.com/ **** - 171020.appspot.com/swift.txt?GoogleAccessId=storageadmin@****-171020.iam.gserviceaccount.com&Expires=1503755879&Signature=tlcHVRwbvMSxaIB6oO/ TDXRDczXGFSE6ZXHmZbtCUMhjpos36 / 1KdKV7Lbmm7XtKsq42SFNksUIZLplyAMpkG8aMBuydeoJd + kvebLxK2k + AX8Xr2VVf5Aq / vVJrPGGYGD0iEN + bY264NIFbyJnlm0pthCVGtB5YqZJadCFDwPFWqi04312Jzzen1CXDY + saY0BabmXaZeCzINz7kV + aq0AJoS8taW0uqboYc1o4gCA6OPAswMr1E840a + II4HqkeOWcv7PiHEPdw / sgH3PR + TkGmjTAd9f8H6zJIFaT8DLbtsl7t3iAUM7Fvdtc9pGQt6KT0qUm9z3XfPEjP8OsTA ==
接头: 内容-MD5:7Qdih1MuhjZehB6Sv8UNjA == 内容类型:文本/无格式
这是有效的Python程序:
contract_evaluation
请帮助我了解这里发生的事情。谢谢!
答案 0 :(得分:4)
查询字符串中的键和值需要进行uri编码。您获得“SignatureDoesNotMatch”的原因是,在接收端,它们是uri解码您提供的内容,期望它是uri编码的,并且由于您提供的内容未编码,因此解码会产生不同的签名。 / p>
有关保留字符,请参阅此链接: https://tools.ietf.org/html/rfc2396#section-2
帮助您对查询字符串进行编码的在线工具: http://www.url-encode-decode.com/
你的python代码工作的原因是请求库自动uri编码查询字符串参数。