C# 删除HttpClient请求中的主机头
我正在使用HttpClient类向特定主机发送一些数据。我只想发送一个纯标头,其中没有任何额外的行,比如(“Host:http”)。所以这一行是最后一个从标题中删除的,但我不知道如何删除 守则:C# 删除HttpClient请求中的主机头,c#,http,fiddler,C#,Http,Fiddler,我正在使用HttpClient类向特定主机发送一些数据。我只想发送一个纯标头,其中没有任何额外的行,比如(“Host:http”)。所以这一行是最后一个从标题中删除的,但我不知道如何删除 守则: HttpRequestMessage msg = new HttpRequestMessage(HttpMethod.Post, aUrl); msg.Headers.Clear(); msg.Headers.Remove("Host"); msg.Headers.ExpectContinue = fa
HttpRequestMessage msg = new HttpRequestMessage(HttpMethod.Post, aUrl);
msg.Headers.Clear();
msg.Headers.Remove("Host");
msg.Headers.ExpectContinue = false;
Encoding encoding = ConfiguratorASUST.Instance.Encoding ?? Encoding.GetEncoding(ConfiguratorASUST.ENCODING_DEFAULT);
msg.Content = new StringContent(aStr, encoding);
_client.SendAsync(msg);
Fiddler中的结果标头:
POST http://http//localhost.fiddler:60001/POS/POSTELESPIS HTTP/1.1
Content-Type: text/plain; charset=windows-1251
Host: http
需要从消息头中删除这一行Host:http
。但我到底怎么能做到?!我尝试了以下方法:
msg.Headers.Clear();
msg.Headers.Remove("Host");
if (oSession.oRequest.headers.HTTPVersion == "HTTP/1.0")
{
oSession["x-overridehost"] = oSession.host;
oSession.oRequest.headers.Remove("Host");
}
无济于事。实际上,我还看到添加了标题
代理连接:Keep-Alive
。如果仔细检查您的URL,看起来您的URL还是错的:http://http//
-您的主机真的命名为http
,您真的需要在它后面加两个斜杠吗?无论如何,如果您解决了这个问题,Host
标题将携带localhost.fiddler:60001
通过删除主机头,实际上是将请求降级到HTTP/1.0
您可以在HttpRequestMessage
中设置HTTP版本,如中所述:
但当使用Fiddler时,它充当代理,并将您的请求作为HTTP/1.1请求转发—再次包括主机头。您还可以在Fiddler中更改请求。这在中进行了解释,但请注意粗体文本,强调我的:
根据RFC,作为HTTP/1.1代理,Fiddler需要添加主机头
不清楚为什么会出现问题--根据定义,任何有问题的服务器都有缺陷,应该修复
如果愿意,可以删除标题(尽管这样做可能会在其他地方引起问题)。单击规则>自定义规则。滚动至OnBeforeRequest并添加以下内容:
msg.Headers.Clear();
msg.Headers.Remove("Host");
if (oSession.oRequest.headers.HTTPVersion == "HTTP/1.0")
{
oSession["x-overridehost"] = oSession.host;
oSession.oRequest.headers.Remove("Host");
}
如果您仔细检查您的URL,看起来您的URL是错误的:
http://http//
-您的主机真的命名为http
,您真的需要在它后面加两个斜杠吗?无论如何,如果您解决了这个问题,Host
标题将携带localhost.fiddler:60001
通过删除主机头,实际上是将请求降级到HTTP/1.0
您可以在HttpRequestMessage
中设置HTTP版本,如中所述:
但当使用Fiddler时,它充当代理,并将您的请求作为HTTP/1.1请求转发—再次包括主机头。您还可以在Fiddler中更改请求。这在中进行了解释,但请注意粗体文本,强调我的:
根据RFC,作为HTTP/1.1代理,Fiddler需要添加主机头
不清楚为什么会出现问题--根据定义,任何有问题的服务器都有缺陷,应该修复
如果愿意,可以删除标题(尽管这样做可能会在其他地方引起问题)。单击规则>自定义规则。滚动至OnBeforeRequest并添加以下内容:
msg.Headers.Clear();
msg.Headers.Remove("Host");
if (oSession.oRequest.headers.HTTPVersion == "HTTP/1.0")
{
oSession["x-overridehost"] = oSession.host;
oSession.oRequest.headers.Remove("Host");
}
非常感谢CodeCaster提供了如此全面的答案。问题是,我们将不得不使用“非完整标准”http协议,只需再问一个相关问题。我们是否可以使用标准的HttpClient和HttpRequestMessage从标题行中删除“Connection:Keep Alive”呢?我认为默认情况下是关闭的。看见您还必须将Fiddler配置为不重用客户端连接。结果表明,“连接:保持活动”在默认情况下处于启用状态。我们在每个POST请求头中都有这一行。链接下的页面没有帮助我们删除它。认为他们应该是实现这一目标的简单方法。。但这个问题还没有解决。谢谢你的帮助/建议。不,不是。您如何确定它是?非常感谢CodeCaster提供了如此全面的答案。问题是,我们将不得不使用“非完整标准”http协议,只需再问一个相关问题。我们是否可以使用标准的HttpClient和HttpRequestMessage从标题行中删除“Connection:Keep Alive”呢?我认为默认情况下是关闭的。看见您还必须将Fiddler配置为不重用客户端连接。结果表明,“连接:保持活动”在默认情况下处于启用状态。我们在每个POST请求头中都有这一行。链接下的页面没有帮助我们删除它。认为他们应该是实现这一目标的简单方法。。但这个问题还没有解决。谢谢你的帮助/建议。不,不是。你怎么确定它是?