我正在尝试编写POST
请求,使用SQS
签名从C++
V4
服务器中获取邮件,POST
邮件看起来像此,
POST / 134148934511 / Localhost /?Action = ReceiveMessage& SignatureMethod = AWS4-HMAC-SHA256& SignatureVersion = 4& Version = 2012-11-05& X-Amz-Credential = AKIAI21OTNJCTG12UP7NA / 20140602 / us-east-1 / SQS / aws4_request&安培; X-AMZ-日期= 20140602T152045Z&安培; X-AMZ-内容-SHA256 = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&安培; X-AMZ-SignedHeaders =主机; X-AMZ-内容-SHA256; X-AMZ-日期&安培;签名= 6fada82dcfa52392bd15d29946115e34e1f2485fe87a59cead8320fa05bcea67 HTTP / 1.1 主持人:sqs.us-east-1.amazonaws.com 接受: / 内容长度:0 内容类型:application / x-www-form-urlencoded
但是我收到一条403 Forbidden
错误消息(虽然我有所需的权限)。
(我确信aws版本4签名过程是正确的(用S3检查))
我做错了什么?
答案 0 :(得分:1)
回答我自己的问题。
上述请求中存在一些错误。
a)在POST请求中,您不要将查询参数包含在URL中,而是将其添加到正文本身(这也是使用标题"内容类型:application / x向服务器指示的-www窗体-urlencoded"。)
b)始终记得将所有标题添加到创建签名时使用的curl请求中,否则会抛出"签名不匹配"错误。