11

使用 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 更改它?

4

4 回答 4

8

从我的书中

交换主机头

当 Fiddler 收到 URL 与其 Host 标头不匹配的请求时,原始 Host 值存储在会话标志中X-Original-Host,然后将该Host值替换为从 URL 解析的主机。以下脚本放置在 FiddlerScript 的BeforeRequest函数中,通过将请求路由到原始 Host 标头指定的主机来反转行为。

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;
  }
}
于 2013-02-13T19:33:08.883 回答
1

你可以用规则来做到这一点。

进入自定义规则,找到函数:OnBeforeRequest(oSession: Session)

然后添加以下内容作为该函数的最后一行:

if (oSession.HostnameIs("proxy.music.pp.com")) { oSession.host = "119.147.22.41"; }
于 2013-02-13T14:04:52.277 回答
0

我不明白“url 主机”应该是什么——我的意思是,通常情况下,HTTP 中只有 Host 标头。

仔细观察,似乎这种违规发生在初始代理“设置”请求中,如下所示:

 CONNECT targaryen:45633 HTTP/1.1
 Host: targaryen

这就是错误对我有意义的地方。

于 2013-10-18T19:05:14.230 回答
0

我无法获得现有答案所需的信息,但 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;
        }
    }

出现此错误:
404错误 错误的请求

并将其更改为: 200 响应 好的请求

于 2019-02-28T22:22:26.627 回答