gpt4 book ai didi

C# HttpWebRequest 日期 header 格式化

转载 作者:太空狗 更新时间:2023-10-29 20:59:16 24 4
gpt4 key购买 nike

我正在向 S3 发出一个 HttpWebRequest,我正在尝试将 Date header 设置为如下内容:

"Mon, 16 Jul 2012 01:16:18 -0000"

这是我尝试过的:

string pattern = "ddd, dd MMM yyyy HH:mm:ss -0000";
request.Date = DateTime.ParseExact("Mon, 16 Jul 2012 01:16:18 -0000", pattern, null);

但是,当我查看请求的 header 时,这是我得到的:

request.Headers.Get("Date");
// "Mon, 16 Jul 2012 07:16:18 GMT"

我相信这可能是请求出现 403 的原因。 AWS 错误文档提到:

403 Forbidden - The difference between the request time and the server's time is too large.

如有任何关于安排此日期的建议,我们将不胜感激。谢谢!

最佳答案

有几点需要澄清:

  • 您的日期模式不正确。

  • HttpWebRequest request.Date header 只能在 .NET Framework 4 中修改,根据文档,System.Net 命名空间将始终写入此 header 作为使用 GMT (UTC) 格式 的标准格式。因此,无论您如何根据需要格式化日期,都行不通!

  • 在其他 .NET 框架版本中,您将无法修改 HttpWebRequest request.Date header ,因为它将使用正确的 GMT (UTC) 格式的实际日期,除非您使用一种设置您自己的日期和格式的技巧(见下文)。


您的问题的解决方案(已测试并有效):

您的导入:

using System.Net;
using System.Reflection;

获取今天的日期格式:Mon, 16 Jul 2012 01:16:18 -0000

string today = String.Format("{0:ddd,' 'dd' 'MMM' 'yyyy' 'HH':'mm':'ss' 'K}", DateTime.Now);

棘手的事情来了,您可以通过执行以下操作来破解 HttpWebRequest 日期 header :

(不要再做 request.Date = something;,用下面的代替)

MethodInfo priMethod = request.Headers.GetType().GetMethod("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic);
priMethod.Invoke(request.Headers, new[] { "Date", today });

从您的请求中获取日期(仅用于测试):

// "myDate" will output the same date as the first moment: 
// Mon, 16 Jul 2012 01:16:18 -0000
// As you can see, you will never get this again:
// Mon, 16 Jul 2012 07:16:18 GMT
string myDate = request.Headers.Get("Date");

此时您已成功将自己的格式和日期值设置为 HttpWebRequest 日期 header !

希望这有帮助:-)

关于C# HttpWebRequest 日期 header 格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11497177/

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