发布到 api 网关时无法解析“授权标头中的“不是有效的键=值对(缺少等号)”

Tes*_*uji 22 python amazon-web-services aws-api-gateway

我创建了一个 api 网关来将数据放入我的 s3 存储桶中。当我在控制台中测试它时,它没有问题。即使我在授权方测试中测试我的令牌时,它也会返回“允许”,因此我的令牌没有任何问题。我的令牌验证是

^Bearer [-0-9a-zA-z\.]*$
Run Code Online (Sandbox Code Playgroud)

所以我用于生成标题的 python 代码如下所示:

headers = {
    "Authorization": "Bearer " + token,
    "Content-type": "application/json"
}
Run Code Online (Sandbox Code Playgroud)

我的其余代码是:

response = requests.post(url, headers=headers, data={"id":"0678a93d-ee8c-4db5-a831-1e311be4f04b", "test":"12345"})
print(response.text)
Run Code Online (Sandbox Code Playgroud)

我得到的错误消息是 "{"message":"'{My Token}' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer {My Token}'."}"

我的网址如下所示:

https://my-api-gateway.amazonaws.com/MyStage,我在我的资源中使用了 {proxy+}。我注意到如果我将标题从 Content-type 更改为 Accept,它会给我同样的错误,但如果我也将我的 url 更改为https://my-api-gateway.amazonaws.com/MyStage/any-arbitrary-string /,我得到一个

   {"response":{"status":"VALID", "message": "success"}} 

Run Code Online (Sandbox Code Playgroud)

但该文件没有出现在我的 s3 存储桶中。我该如何解决?

Wil*_*ain 22

当解析的 URL 不正确时,我遇到了这个错误。(或者没有代理但 URL 不正确。)

  • 非常感谢您:AWS 错误消息对此进行调试是无望的。学过的知识; 不要盲目相信文档。 (6认同)
  • 另外,检查一下方法。它可能是 POST 而不是 GET 等。 (4认同)
  • Web 开发已经存在很长时间了。为什么他们不能给出清晰、准确的错误消息?无论如何,谢谢,这是我的问题的解决方案。 (2认同)

Tes*_*uji 8

我解决了。我将方法更改为来自根资源(而不是不必要的 {proxy+},并且还注意到我的 python 方法不正确。我有response = requests.post(url, headers=headers, data=my_json),但数据只接受字符串。我必须使用requests.post(url, headers=headers, json=my_json)requests.post(url, headers=headers,data=json.dumps(my_json))


Tom*_*yen 7

对我来说,它不起作用的原因是因为我在对集成进行更改时没有重新部署。

所以如果你使用terraform来创建资源,你需要包含这个triggers部分。请参阅:https : //www.terraform.io/docs/providers/aws/r/api_gateway_deployment.html#redeployment-triggers

如果您使用的是 UI,请检查: 在此处输入图片说明


小智 5

我也遇到过同样的问题。对我来说,问题是由于网址区分大小写造成的。请确保每个单词的拼写和大小写均正确。