在HttpClient请求中删除主机头

Pav*_*vel 1 c# http fiddler

我正在使用HttpClient类将一些数据发送到特定主机.我只想发送一个没有任何额外行的纯标题,如("Host:http").所以这一行是最后一个从标题中删除,但我不知道如何.

代码:

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);
Run Code Online (Sandbox Code Playgroud)

Fiddler中的结果标题:

POST http://http//localhost.fiddler:60001/POS/POSTELESPIS HTTP/1.1
Content-Type: text/plain; charset=windows-1251
Host: http
Run Code Online (Sandbox Code Playgroud)

Host: http需要从邮件的标题中删除此行.但是我怎么能这样做呢?!我尝试了以下方法:

msg.Headers.Clear();
msg.Headers.Remove("Host");
Run Code Online (Sandbox Code Playgroud)

无济于事.实际上我也看到了标题Proxy-Connection: Keep-Alive的添加.

Cod*_*ter 5

如果你仔细检查你的URL,看起来你的错误似乎是:http://http//- 你的主机真的被命名了http,你真的需要两个斜杠吗?无论如何,如果你修复它,Host标题将携带localhost.fiddler:60001.

通过删除Host标头,您实际上将您的请求降级为HTTP/1.0.

您可以按照HttpClientHttpRequestMessage设置HTTP协议版本中的说明设置HTTP版本:

msg.Version = HttpVersion.Version10;
Run Code Online (Sandbox Code Playgroud)

但是当使用Fiddler时,它充当代理,并将您的请求转发为HTTP/1.1请求 - 再次包括主机头.您也可以在Fiddler中更改请求.在如何阻止fiddler插入"主机"HTTP标头中解释了这一点,但要注意大胆的文字,强调我的:

根据RFC,作为HTTP/1.1代理,Fiddler需要添加Host头.

目前尚不清楚为什么这有问题 - 根据定义,任何有问题的服务器都是错误的并且应该修复.

如果您愿意,可以删除标题(尽管这样做会导致其他地方出现问题).单击规则>自定义规则.滚动到OnBeforeRequest并添加以下内容:

if (oSession.oRequest.headers.HTTPVersion == "HTTP/1.0")
{
    oSession["x-overridehost"] = oSession.host;
    oSession.oRequest.headers.Remove("Host");
}
Run Code Online (Sandbox Code Playgroud)