使用Fiddler时,会弹出警告对话框。
Fiddler has detected a protocol violation in session #14.
The Request's Host header did not match the URL's host component.
URL Host: proxy.music.pp.com
Header Host: 119.147.22.41
它显示Fiddler将HTTP Header的主机更改为“proxy.music.pp.com”,有没有办法禁用Fiddler更改它?
答案 0 :(得分:8)
来自我的book:
交换主机标头
当Fiddler获取其URL与其Host头不匹配的请求时,原始Host值将存储在会话标志X-Original-Host
中,然后Host
值将替换为从中解析的主机URL。放置在FiddlerScript的BeforeRequest
函数中的以下脚本通过将请求路由到原始主机头指定的主机来反转行为。
if (oSession.BitFlags & SessionFlags.ProtocolViolationInRequest)
{
var sOverride = oSession["X-Original-Host"];
if (!String.IsNullOrEmpty(sOverride))
{
oSession["X-overrideHost"] = sOverride;
oSession["ui-backcolor"] = "yellow";
// Be sure to bypass the gateway, otherwise overrideHost doesn't work
oSession.bypassGateway = true;
}
}
答案 1 :(得分:1)
您可以使用规则执行此操作。
进入自定义规则,找到函数:OnBeforeRequest(oSession: Session)
然后将以下内容添加为该函数的最后一行:
if (oSession.HostnameIs("proxy.music.pp.com")) { oSession.host = "119.147.22.41"; }
答案 2 :(得分:0)
我不明白“url host”应该是什么 - 我的意思是,通常,HTTP中只有Host头。
仔细观察,似乎这种违规发生在初始代理“设置”请求中,如下所示:
CONNECT targaryen:45633 HTTP/1.1
Host: targaryen
这是错误对我有意义的地方。
答案 3 :(得分:0)
我无法获得现有答案所需的内容,但是Eric Law的答案为我提供了解决问题所需的内容。我在通过IP地址调用Web服务器时遇到问题,必须添加Host标头才能获得正确的端点。 Fiddler将Host标头更改为我正在调用的IP地址,并删除了Host标头值,这导致调用失败。我在Eric的脚本中添加了一行来解决此问题。我将规则放入Fiddler Rules脚本的 OnBeforeRequest 中。
if (oSession.BitFlags & SessionFlags.ProtocolViolationInRequest)
{
var sOverride = oSession["X-Original-Host"];
if (!String.IsNullOrEmpty(sOverride))
{
oSession["X-overrideHost"] = sOverride;
oSession["ui-backcolor"] = "yellow";
oSession.oRequest["Host"] = sOverride;
// Be sure to bypass the gateway, otherwise overrideHost doesn't work
oSession.bypassGateway = true;
}
}