首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用HttpWebRequest更改报头顺序?

是否可以使用HttpWebRequest更改报头顺序?
EN

Stack Overflow用户
提问于 2009-02-06 20:08:49
回答 2查看 2.2K关注 0票数 5

我需要改变头部的顺序,我使用的是:

代码语言:javascript
复制
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = context.Request.HttpMethod;
request.UserAgent = context.Request.UserAgent;

它的输出是:

代码语言:javascript
复制
GET /* HTTP/1.1
User-Agent: My Server
Host: 127.0.0.1:1080

但它应该是

代码语言:javascript
复制
GET /* HTTP/1.1
Host: 127.0.0.1:1080
User-Agent: My Server

有什么想法吗?

耽误您时间,实在对不起。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-06 21:22:13

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

票数 3
EN

Stack Overflow用户

发布于 2021-08-01 12:19:31

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

代码语言:javascript
复制
        /// <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版本中,标头字段具有更高的优先级。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/521977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档