gpt4 book ai didi

c# - 在发送之前检查 HttpRequestMessage

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:38 26 4
gpt4 key购买 nike

我的任务是整合 Amazon Gift Codes On Demand (AGCOD)安静的 API。我们需要使用 Signature Version 4 签署我们的请求,由他们执行的操作 AWS SDK for .NET用于其他服务,但不包括 AGCOD。

我正在使用 HttpClient来自 System.Net.Http 的类(class)与 AWS 的 API 通信的命名空间。这反过来又使用了 HttpClientHandler创建一个 HttpRequestMessage .这样做时,会将额外的 header (如 HostContent-LengthConnection 添加到消息中。

我的问题是,我如何在调用 PostAsync 后检查消息?并且 header 已添加,但在将其发送到服务器之前我可以计算并添加签名?

我显然可以自己简单地指定这些 header 。但这只对已知的标题有帮助。如果不同 HttpMessageHandler使用(例如 WebRequestHandler )然后可以添加不同的 header (例如 Content-EncodingCache-Control)。如果我不知道消息中的所有 header ,我将无法计算出正确的签名。

最佳答案

大多数(可能是全部)AWS 服务实际上并不要求您包含所有 header 。出于您提到的原因,亚马逊显然预料到这会带来问题。

The canonical headers consist of a list of all the HTTP headers that you are including that are part of the AWS request. As a minimum you must include host header, and different services might require other headers. [emphasis added]

http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html

通常,您需要添加的 header 是您在应用程序级别已经知道的 header ,例如任何特定于服务的 x-amz-* header .您无需担心包含的 header 示例包括 User-Agent:。 http 客户端库经常添加的一个 header 是 Date: header ,但是如果您包含格式正确的 x-amz-date: header ,并且日期与您使用的日期相同为了计算签名,实际的 Date: header 将在验证签名时被忽略,而是使用您的替代 header 。

我知道这并没有直接回答您的问题,但我怀疑您预计需要做的事情可能很乏味或不切实际,所以我认为这个信息值得一提。

关于c# - 在发送之前检查 HttpRequestMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32849595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com