修改fiddler中CustomRules.js的Request或Response

本文介绍如何使用Fiddler修改请求和响应数据,包括转发请求、修改字段、模拟请求、解决跨域问题、网络限速及HTTPS抓包等高级技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 下面我先通过两个具体例子来进行说明修改fiddler的CustomRules.js的规则

1.将请求的域名转发到带端口号的host上,并不改变后面的请求地址.(注意:这个是发请求,所以要放在请求之前)

  方法步骤:

         (1)fiddler,选择Rules—customize 

           (2)记事本打开CustomRules.js文件

         (3)查找OnbeforeRequest,在  static function OnBeforeRequest(oSession: Session) {}

            里面加入 if (oSession.host.toLowerCase()== 'tdrec.youku.com'){oSession.host='10.108.50.152:2082'; }

         (4)保存记事本后,访问网页,代理成功,可以在fiddler看到接口的域名变成10.108.50.152:2082

 

 

2.修改页面输出的数据字段,比如针对土豆播放页面的tvccode,tvccode=-1修改成tvccode=1003。(注意:这个是返回响应信息,所以放在响应之前)

方法步骤:

 

         (1)fiddler,选择Rules—customize 

           (2)记事本打开CustomRules.js文件

         (3)查找OnBeforeResponse,在  static function OnBeforeResponse(oSession: Session) {}里面加入

                 if (oSession.uriContains("dvd=138715")) { //判断Url内容中是否包含特定内容,针对这个Url进行下面的操作
                     oSession.utilDecodeResponse();
                    oSession.utilReplaceInResponse("tvcCode: '-han1'", "tvcCode:'1003'");

                    }  

            (4)可以通过快捷键Ctrl+U查看页面输出的tvccode或者在控制台中打印出tvccode查看是否修改成功,如下图所示

修改响应后,结果:

3.在Fiddler Script中修改Request中的body的数据

 oSession.utilReplaceInRequest("1111", "2222");

具体例子:

修改某个接口的请求IP为随机地址,不中防刷机制,如下图所示

代码:在static function OnBeforeRequest(oSession: Session) {}函数里面加如下代码:

oSession.utilReplaceInRequest("114.80.235.143", parseInt(255*Math.random())+"."+parseInt(255*Math.random())+"."+parseInt(255*Math.random())+"."+parseInt(255*Math.random()) );

 

     推荐http://blog.csdn.net/coolcaosj/article/details/39668305?utm_source=tuicool,很感谢SaRanCao,更多的FiddlerScript内容的学习可以去他的博客,可以很灵活的根据项目的需要修改Request或Response ,达到自己想要的结果。SaRanCao说的一句"修改Request和Response要在FiddlerScript中的OnBeforeRequest和OnBeforeResponse函数中添加规则即可。OnBeforeRequest函数是在每次请求之前调用,OnBeforeResponse函数是在每次响应之前调用",非常好用,记住这一条就OK了。

参考博客:http://www.cnblogs.com/TankXiao/archive/2012/04/25/2349049.html

                   http://blog.csdn.net/coolcaosj/article/details/39668305?utm_source=tuicool

4.由于遇到过跨域请求,请求返回数据代理到本地无法成功的问题,解决办法:在fiddlerscript增加响应头信息,让请求返回数据的时候,都自动加上access-control-allow-origin和access-control-allow-headers的内容:

方法步骤:

               (1)在CustomRules.js中搜索OnBeforeResponse,在static function OnBeforeResponse(oSession: Session) 函数里增加代码:

                      if (oSession.HostnameIs("122.225.193.5:3310")){//指定域名是特定的内容,针对这个域名增加响应头,这个响应头从正常访问数据中获取,再自己模拟添加
            oSession.ResponseHeaders.Add("Access-Control-Allow-Origin","http://122.225.193.5:3380");
            oSession.ResponseHeaders.Add("Access-Control-Allow-Headers","Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token");
        }

               (2)再抓请求代理到本地文件,页面已请求到本地文件,成功的达到想要的结果!

参考:http://blog.csdn.net/weiwenhp/article/details/50009521

            https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

5.网络限速,测试不同网络下的运行情况

    修改CustomRules.js达到目的。首先在OnBeforeRequest函数里面找simulate,通过设置修改数值达到限速的不同要求,如下:

 

 

 

 

 

6.Options-HTTPS-Capture HTTPS CONNECTs—Decrypt HTTPS traffic—Skip decryption for the following hosts

     手机在代理到抓包工具出现无法看到一些请求数据和返回的数据,请求显示成灰色。同时,fiddler显示A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below,导致流程无法进行下去。在出现这种情况可以尝试在Skip decryption for the following hosts加入该请求的host。遇到的场景:收银台调用第三方SDK支付失败(ApplePay、云闪付),这个时候就可以把抓包到灰色请求的host添加到Skip decryption for the following hosts,就能完美的成功调起来。

 

 

 

 

7.fiddler抓取https请求的步骤设置

 

 

(1)手机代理到fiddler(这个步骤和设置就不说明了,就设置https和Connections。https设置和connections设置本文章都有截图),手机浏览器访问代理的ip和port下载证书(http://ip:port)并安装完成。ios会自动安装,Android若无法自动安装可以去找到下载存放的目录,点击进行安装。

 

 

 (2)需要设置证书信任。ios:通用-关于本机-证书信任设置,启用代理工具信任。Android:安全-受信任的凭证,启用fiddler代理。(暂时只知道这些,若有遗留后续补充)

(3)没有第三步

 

8.composer模拟发送请求,遇到下面的报错,解决版本是如下图所示填写协议号( Tools  -> Options  ->Https->添加protocols)。具体的解决步骤见:http://www.cnblogs.com/cbugs/p/9304370.html

[Fiddler] The connection to 'XXX' failed. <br />System.Security.SecurityException Failed to negotiate HTTPS connection with server.fiddler.network.https&gt; HTTPS handshake to XXX (for #1) failed. System.IO.IOException 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。 &lt; 远程主机强迫关闭了一个现有的连接。

 

 

 

 

<think>好的,我需要帮助用户在Fiddler中设置过滤器,仅捕获HTTPS请求。首先,我应该回忆一下之前学过的Fiddler过滤配置相关的知识。根据用户提供的引用,特别是引用[2]和引用[3],里面提到在Tools-Options-HTTPS里进行设置,以及使用Filters标签来过滤特定主机的请求。不过用户的问题是关于HTTPS请求的过滤,这可能涉及到不同的设置步骤。 首先,我记得Fiddler默认会捕获所有进程的HTTP和HTTPS请求,所以用户可能需要调整HTTPS捕获的设置,者通过过滤器来显示仅HTTPS。但可能需要分清楚,HTTPS请求的捕获和解密可能需要先启用HTTPS解密功能。不过用户的问题可能只是过滤显示已有的HTTPS请求,而不是设置HTTPS解密。 查看引用[2]中提到,在Tools-Options-HTTPS中修改设置,可能涉及将“from all processes”改为其他选项,但不确定这是否与过滤有关。引用[3]则提到了在Filters标签下勾选Use Filters,并选择Show only Internet Hosts和输入特定Host地址。但用户需要的是过滤协议类型(HTTPS),而不仅仅是主机域名。 可能Fiddler的过滤器无法直接按协议类型(HTTPHTTPS)过滤,因为所有通过Fiddler的HTTPS请求实际上在显示时可能还是以http://的形式出现,因为Fiddler作为中间人代理,会解密HTTPS流量,并将其显示为明文。所以可能需要其他方法,比如根据端口来过滤,因为HTTPS默认使用443端口,但Fiddler可能显示为远程端口是443,者根据请求的URL中的协议来过滤。 者,是否有其他过滤条件,比如根据请求的URL中包含https的情况?例如,在Filters的条件中设置URL中包含https。不过这可能不准确,因为解密后的请求可能显示为http,但实际远程连接是https。 者,用户可能误解了问题,实际想过滤的是经过Fiddler解密后的HTTPS流量,这时候所有被解密的HTTPS请求在Fiddler中会显示为“Tunnel to”者类似的标识,者可能需要其他过滤方式。 这时候可能需要检查Fiddler的过滤选项,看看是否有针对协议的条件设置。例如,在Filters的“Request Headers”选项中,可以设置隐藏显示某些特定的头信息,者使用正则表达式匹配URL中的https。 根据引用[5],No Host Filter选项可以不过滤主机,而Hide the following Hosts是隐藏特定主机的请求。但用户需要的是按协议过滤,可能需要其他方法。 另外,引用[4]提到可以设置断点,但和过滤显示无关。回到问题,用户想要只显示HTTPS请求。许正确的做法是,在Fiddler的过滤器中,设置只显示那些使用HTTPS协议的请求,但如何实现呢? 可能需要使用Fiddler的过滤规则中的“Protocol”条件,者通过自定义规则来筛选。者,在Fiddler中,HTTPS请求在URL中可能以https开头,因此可以使用Filters中的“Show only if URL contains”选项,输入“https://”。但需要考虑Fiddler解密后的请求是否仍保留原始协议的信息。 者,可能需要在“Filters”标签下的“Hosts”区域,选择“Show only the following Hosts”,并在输入框中指定https的主机,但这样可能不太正确,因为主机名可能不包含协议信息。 另一种思路是,Fiddler捕获的所有HTTPS请求在解密后可能显示为http,但实际的远程端口是443。因此,可以设置过滤条件为远程端口是443。在Fiddler的过滤器中,可以选择“Request Headers”中的“Server”“Remote Port”选项,并设置条件为“RemotePort”等于443。这样就能过滤出所有通过HTTPS的请求,因为默认HTTPS使用443端口。 具体步骤可能如下: 1. 打开Fiddler,进入菜单栏的Rules > Customize Rules,打开CustomRules.js文件,添加脚本进行过滤,但这对普通用户来说可能复杂。 者,使用现有的过滤器选项: 在Filters标签下,勾选“Use Filters”,然后在“Hosts”区域选择“Show only the following Hosts”,但这里无法直接指定协议。可能需要切换到“Request Headers”区域,选择“Show only if URL contains”,输入“https://”,但这可能不准确,因为Fiddler解密后的URL可能显示为http。 者,在“Request Headers”部分,可以设置Flag头信息中的特定值,比如X-Protocol为HTTPS,但这需要服务器发送这样的头,可能不可行。 可能正确的做法是:在Fiddler的会话列表中,右键点击列标题,选择“Choose Columns”,然后添加“Server Port”“Remote Port”列,然后过滤该列为443的会话。但如何在过滤器中设置这个条件? 在Fiddler的Filters标签下,有一个“Conditions”部分,可以设置多个条件。例如,在“Request Headers”部分,有一个“Find a request header”选项,可以设置Header名称是“RemotePort”,值等于443。者使用“Set this filter”中的“Server”“ClientPort”等选项。 者,在Filters的“Miscellaneous”区域,选择“Client Process”来过滤进程,但这可能和协议无关。 可能需要更深入查看Fiddler的过滤器选项。根据引用[3],可以设置“Show only the following Hosts”,但这是针对主机名而非协议。 许用户的问题更简单:只需要在Fiddler中启用HTTPS捕获,而禁用HTTP捕获。因为Fiddler默认捕获所有请求,包括HTTP和HTTPS。如果用户想只捕获HTTPS,可以在Tools > Options > HTTPS中取消勾选“Capture HTTP CONNECTs”,但这样可能影响HTTPS捕获。者,可能需要在过滤器中选择仅显示HTTPS请求。 者,用户可能误解,因为所有HTTPS请求在Fiddler中都会被捕获并显示为Tunnel to host,但需要解密后才能查看内容。如果用户希望仅查看这些Tunnel请求(即HTTPS连接),可能需要过滤会话类型为Tunnel的请求。例如,在Filters的“Session Type”中选择“Tunnel”。但Fiddler中的Tunnel类型通常表示HTTPS连接,而具体的请求(如GET、POST)会在Tunnel建立后的子会话中出现。所以如果用户仅想看到Tunnel会话(即HTTPS连接的建立),可以选择过滤Tunnel类型。但这可能不能满足用户的需求,因为实际的应用层请求(如HTTP GET/POST)是在Tunnel之后进行的,且会被解密显示为普通的HTTP请求。 这可能意味着,用户的问题可能需要更具体的步骤。例如,在Fiddler中,如果要仅显示HTTPS请求的内容,可能需要先设置解密HTTPS流量,然后在过滤器中设置显示这些解密后的请求,但如何区分它们原本是HTTP还是HTTPS? 者,可能用户希望捕获的请求是通过HTTPS协议发送的,即客户端发起的请求是HTTPS的,而不管Fiddler是否解密。这种情况下,可能需要根据请求的URL中的协议来判断,者根据端口。 综合上述思考,正确的步骤可能包括: 1. 启用Fiddler的HTTPS解密功能(Tools > Options > HTTPS,勾选Decrypt HTTPS traffic)。 2. 在Filters中设置显示URL包含“https”的请求,者远程端口为443的请求。 但具体如何操作呢? 在Filters标签下: - 勾选“Use Filters”。 - 在“Hosts”区域,可以选择“Show only the following Hosts”,但这可能不直接对应协议。 - 切换到“Request Headers”区域,选择“Show only if URL contains”,输入“https://”,但可能无法正确匹配,因为解密后的请求可能显示为http://。 - 者,在“Response Headers”其他部分设置条件。 者,在“Miscellaneous”区域,选择“Hide CONNECTs”,这可能过滤掉HTTPS的Tunnel建立请求,但用户可能想保留这些。 可能正确的办法是,在Fiddler的过滤器中使用“Request Headers”中的“Host”和端口信息。例如,在“Request Headers”部分,设置“Find a request header”为“RemotePort”,值等于443。但这需要确认Fiddler是否支持这样的条件设置。 者,用户可以通过自定义规则来实现。例如,在FiddlerScript中编写规则,检查会话的端口是否为443,然后隐藏其他请求。具体步骤可能是在CustomRules.js中添加代码: ```javascript if (oSession.port != 443) { oSession["ui-hide"] = "true"; } ``` 这可能更直接,但需要用户编辑脚本,这对普通用户来说可能比较复杂。 回到用户提供的引用,引用[3]提到在Filters中选择“Show only Internet Hosts”和输入host地址,可能用户需要结合这些步骤,但如何应用到协议过滤? 许正确的答案是在Filters的“Request Headers”部分,设置“Show only the following Hosts”并结合端口过滤,者使用其他条件。但根据现有的引用,可能没有直接的方法,因此需要结合多个步骤。 者,用户可能只需要在Fiddler的选项中设置只捕获HTTPS请求,这可能通过取消勾选HTTP选项。但Fiddler默认同时捕获HTTP和HTTPS,无法在选项中直接关闭HTTP捕获,所以必须使用过滤器。 总结可能的步骤: 1. 打开Fiddler,转到菜单栏的Tools > Options > HTTPS,确保“Decrypt HTTPS traffic”已启用,以捕获HTTPS请求。 2. 转到Filters标签,勾选“Use Filters”。 3. 在“Hosts”区域,选择“Show only the following Hosts”,然后输入需要过滤的主机名,这可能不直接相关。 4. 者,在“Request Headers”区域,选择“Show only if URL contains”并输入“https://”,但不确定是否有效。 5. 另一种方法:在会话列表的列中添加“Server Port”“Remote Port”,然后手动过滤端口为443的会话,但这无法自动过滤,需要每次手动操作。 6. 最终,可能需要使用自定义脚本条件来过滤端口为443的请求,这可能涉及到更高级的设置。 根据现有的引用,引用[2]提到在Tools-Options-HTTPS修改设置,可能涉及从所有进程中捕获,但不确定。引用[3]中的过滤步骤可能不够直接解决协议过滤问题。 可能正确的步骤是,在Fiddler的过滤器中设置远程端口为443,具体操作如下: 1. 打开Fiddler,点击右侧的“Filters”标签。 2. 勾选“Use Filters”。 3. 在“Conditions”部分,选择“Request Headers”下的“Find a request header”。 4. 输入Header名称“RemotePort”,比较值为“equals”,输入值“443”。 5. 应用更改,然后点击“Actions”下的“Run Filterset Now”。 这样,Fiddler将只显示远程端口为443的请求,即HTTPS请求。 但需要验证这是否可行。如果Fiddler支持通过请求头中的RemotePort来过滤,这可能有效。否则,可能需要使用其他方式。 另外,Fiddler的会话列表中的每个会话都有远程端口的信息,可以通过该列进行排序过滤,但这是手动操作,不是自动过滤器。 总结,正确的配置步骤可能包括使用过滤器中的远程端口条件设置为443,者自定义脚本。根据用户提供的引用,可能更倾向于使用过滤器中的条件设置,因此答案可能如下: 在Fiddler的Filters标签中,启用Use Filters,然后在Request Headers部分设置RemotePort等于443。具体步骤可能包括: 1. 打开Fiddler,进入右侧的Filters面板,勾选“Use Filters”。 2. 在“Conditions”区域的“Request Headers”部分,选择“Find a request header”。 3. 在Header字段输入“RemotePort”,值设置为443。 4. 应用过滤器。 此外,需要确保Fiddler正在捕获HTTPS流量,这需要在HTTPS设置中启用解密。 但根据用户提供的引用,引用[3]提到在Filters中选择Show only Internet Hosts和输入host地址,而引用[2]提到在Tools-Options-HTTPS中的设置。可能需要结合这些步骤,比如先启用HTTPS捕获,然后在过滤器中设置端口条件。 最终,正确的步骤应包括: 1. 确保Fiddler已配置捕获HTTPS流量:Tools > Options > HTTPS > 勾选“Decrypt HTTPS traffic”[^2]。 2. 在Filters标签中,勾选“Use Filters”。 3. 在“Hosts”区域,选择“Show only the following Hosts”并留空,者进入“Request Headers”设置过滤条件为RemotePort=443。 4. 应用过滤器。 者,在“Miscellaneous”区域,选择“Hide traffic”中的“HTTP”类型,但Fiddler可能没有直接这样的选项。 经过进一步思考,可能用户需要设置的步骤如下: - 在Fiddler的Filters中,设置仅显示HTTPS请求,可以通过过滤URL以https://开头,者远程端口为443。 - 但根据Fiddler的文档,可以使用以下步骤: 1. 打开Fiddler,转到右侧的Filters面板。 2. 勾选“Use Filters”。 3. 在“Hosts”部分,选择“No Host Filter”。 4. 转到“Request Headers”部分,选择“Show only if URL contains”,输入“https://”。 5. 点击“Run Filterset Now”应用设置。 但需要注意的是,Fiddler解密后的HTTPS请求在会话列表中的URL可能显示为http://,因为解密后被视为明文传输。因此,这种方法可能无效。 因此,更可靠的方法是根据端口过滤: 1. 在Filters面板中,勾选“Use Filters”。 2. 在“Request Headers”部分,选择“Find a request header”。 3. 输入Header名称“RemotePort”,比较方式为“equals”,值为“443”。 4. 点击“Run Filterset Now”。 这样,Fiddler将只显示远程端口为443的请求,即HTTPS请求。 此外,确保已启用HTTPS解密,否则Fiddler无法捕获HTTPS请求的内容,但可能仍能看到Tunnel请求。 因此,完整的步骤应包括启用HTTPS解密和设置端口过滤。 最终,整理成步骤: 1. 启用HTTPS解密: - 点击菜单栏的Tools > Options > HTTPS。 - 勾选“Decrypt HTTPS traffic”并确认安装证书。 2. 配置过滤器: - 点击右侧的Filters标签,勾选“Use Filters”。 - 在“Request Headers”部分,选择“Find a request header”。 - 在Header字段输入“RemotePort”,值设为“443”。 - 点击“Actions”下的“Run Filterset Now”应用设置[^3][^5]。 这样,Fiddler将仅显示目标端口为443的HTTPS请求。</think>在Fiddler中配置过滤器仅显示HTTPS请求需通过以下步骤实现: ### 操作步骤 1. **启用HTTPS解密功能** - 打开Fiddler,进入菜单栏的 **Tools > Options > HTTPS** - 勾选 **Decrypt HTTPS traffic** 以捕获并解密HTTPS流量 - 根据提示安装Fiddler根证书(若未安装) 2. **设置端口过滤规则** - 切换到右侧的 **Filters** 标签 - 勾选 **Use Filters** 启用过滤功能 - 在 **Request Headers** 区域中: 1. 选择 **Find a request header** 2. 输入Header名称:`RemotePort` 3. 比较方式选择 **equals**,值设为 `443`(HTTPS默认端口)[^5] - 点击 **Actions > Run Filterset Now** 应用设置 3. **验证过滤效果** - 发起HTTPS请求(如访问`https://example.com`) - 检查会话列表,仅显示目标端口为443的请求 ### 补充说明 - 若需进一步过滤特定域名的HTTPS请求,可在 **Hosts** 区域输入域名(如`example.com`) - 使用 **RemotePort=443** 的过滤条件会包含所有通过HTTPS协议传输的请求,无论是否解密 ```python # 示例:通过Python发送HTTPS请求验证过滤效果 import requests response = requests.get("https://example.com") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值