【问题标题】:HTTP "date" header is missing in UnityWebRequestUnityWebRequest 中缺少 HTTP“日期”标头
【发布时间】:2023-10-06 10:27:01
【问题描述】:

我正在使用 Unity3d 并尝试向需要 Date 请求标头的 API 发送 GET 请求。

但是 UnityWebRequest 不会自动发送它(我已经与 https://requestb.in/ 确认过)并且我无法手动设置它,因为“日期”是受保护的标头之一。

UnityWebRequest www = UnityWebRequest.Get (fullURL);

www.SetRequestHeader("Date", dateTimeString);

yield return www.Send();

我收到以下错误:

ArgumentException: 无法设置请求标头日期 - 名称包含非法字符或用户不可覆盖

如果我使用 WWW 类(它允许我手动设置“日期”标头),我能够成功地与 API 通信,但我正在尝试对 UnityWebRequest 做同样的事情,因为 WWW 很快就会被弃用。

我尝试使用 System.Reflection 的“InternalSetRequestHeader”(在https://forum.unity3d.com/threads/unitywebrequest-cookies.383530/#post-2621262 中实现)如下:

System.Reflection.MethodInfo dynMethod = myReq.GetType ().GetMethod ("InternalSetRequestHeader", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

dynMethod.Invoke (myReq, new object[]{"Date", dateTimeString });

然后我收到以下错误:

InvalidOperationException:无法覆盖系统指定的标头

那么,如何确保发送“日期”请求标头?

是否有解决方案或者我必须使用来自不同库的对象,例如 .NET 的 HttpWebRequest?

【问题讨论】:

    标签: unity3d http-headers webrequest


    【解决方案1】:

    使用 UnityWebRequest,您无法为 Date 字段设置自定义值,请检查 docs

    另外,请检查RFC 2616, section 4.2,尤其是RFC 2616, section 14.18 关于日期标题。另外,请检查RFC 2616 section 3.3.1

    您确定您的dateTimeString 格式正确吗?

    【讨论】:

    • 感谢您的链接。问题不仅在于我无法为 Date 字段设置自定义值,而且 UnityWebRequest 根本没有随请求发送该字段。由于未能自己设置该字段,我现在要做的就是让 UnityWebRequest 像 host 和其他受保护字段一样自动发送它