我正在使用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的添加.
如果你仔细检查你的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并添加以下内容:
Run Code Online (Sandbox Code Playgroud)if (oSession.oRequest.headers.HTTPVersion == "HTTP/1.0") { oSession["x-overridehost"] = oSession.host; oSession.oRequest.headers.Remove("Host"); }
| 归档时间: |
|
| 查看次数: |
4783 次 |
| 最近记录: |