【问题标题】:Is it possible to change headers order using HttpWebRequest?是否可以使用 HttpWebRequest 更改标头顺序?
【发布时间】:2010-10-06 00:54:51
【问题描述】:

我需要更改标题的顺序,我正在使用这个:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = context.Request.HttpMethod;
request.UserAgent = context.Request.UserAgent;

输出是:

GET /* HTTP/1.1
User-Agent: My Server
Host: 127.0.0.1:1080

但应该是的

GET /* HTTP/1.1
Host: 127.0.0.1:1080
User-Agent: My Server

有什么想法吗?

感谢您的宝贵时间。

编辑: 也许有一种使用其他对象的方法......这也是一种选择

【问题讨论】:

  • 您能解释一下为什么它应该按特定顺序排列吗?
  • 这是一个冗长的故事,我的英语还不够好:)

标签: c# sockets httpwebrequest http-headers


【解决方案1】:

有一个明显的抱怨是 .NET 不久前不允许您修改 Host 标头。可能还没有解决。如果它真的那么重要,您总是可以编写套接字级别的代码来发送准备好的请求(因为它只是文本)。

【讨论】:

  • mmmm... 是的,我看到了一个关于主机问题的线程。我想我会使用套接字。谢谢。
【解决方案2】:

我今天遇到了这个问题,但我创建了这个 hack:

        /// <summary>
        /// We aren't kids microsoft, we shouldn't need this
        /// </summary>
        public static void UnlockHeaders()
        {
            var tHashtable = typeof(WebHeaderCollection).Assembly.GetType("System.Net.HeaderInfoTable")
                            .GetFields(BindingFlags.NonPublic | BindingFlags.Static)
                            .Where(x => x.FieldType.Name == "Hashtable").Single();

            var Table = (Hashtable)tHashtable.GetValue(null);
            foreach (var Key in Table.Keys.Cast<string>().ToArray())
            {
                var HeaderInfo = Table[Key];
                HeaderInfo.GetType().GetField("IsRequestRestricted", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(HeaderInfo, false);
                HeaderInfo.GetType().GetField("IsResponseRestricted", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(HeaderInfo, false);
                Table[Key] = HeaderInfo;
            }

            tHashtable.SetValue(null, Table);
        }

那么你只需要在程序启动时调用这个UnlockHeaders函数一次,调用HttpWebRequest类中的Header Collection之后,就会接受任何需要手动添加的header。

然后在向请求添加任何标头之前,请执行以下操作:
myHttpWebRequest.Headers["Host"] = "www.example.com";

在第一个标头之后将是主机,因为看起来在某些 .net 版本中标头字段具有更高的优先级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2010-09-12
    相关资源
    最近更新 更多