我需要改变头部的顺序,我使用的是:
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有什么想法吗?
耽误您时间,实在对不起。
编辑:也许有一种方法可以使用其他对象...这也是一种选择
发布于 2009-02-06 21:22:13
有一个悬而未决的抱怨是.NET不允许你修改Host头文件。它可能还没有得到解决。如果真的那么重要,您可以编写套接字级别的代码来发送准备好的请求(因为它只是文本)。
发布于 2021-08-01 12:19:31
我今天遇到了这个问题,但我创建了这个黑客:
/// <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版本中,标头字段具有更高的优先级。
https://stackoverflow.com/questions/521977
复制相似问题