使用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更改它?
从我的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;
}
}
你可以用规则来做到这一点。
进入自定义规则,找到函数:OnBeforeRequest(oSession: Session)
然后添加以下内容作为该函数的最后一行:
if (oSession.HostnameIs("proxy.music.pp.com")) { oSession.host = "119.147.22.41"; }
我不明白“url host”应该是什么 - 我的意思是,通常,HTTP中只有Host头。
仔细观察,似乎这种违规发生在初始代理“设置”请求中,如下所示:
CONNECT targaryen:45633 HTTP/1.1
Host: targaryen
这是错误对我有意义的地方。
我无法得到现有答案所需的东西,但Eric Law的答案给了我解决问题所需要的东西。我遇到的问题是我通过IP地址调用Web服务器,我不得不添加一个Host头来获取正确的端点。 Fiddler正在将Host头更改为我正在调用的IP地址并删除我的Host头值,这导致调用失败。我在Eric的脚本中添加了一行来解决这个问题。我将规则放入Fiddler规则脚本中的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;
}
}