我正在使用Fiddler拦截特定远程文件的请求,而我正在处理它们(因此我可以在本地调整它们而不触及已发布的内容)。
即。我使用了很多这样的规则
match: regex:(?insx).+/some_file([?a-z0-9-=&]+\.)*
respond: c:\somepath\some_file
这很有效。
我现在要做的就是更进一步,这样做
match: regex:http://some_dummy_domain/(anything)?(anything)
respond: c:\somepath\(anything)?(anything)
或者,用纯文本,
拦截任何对'some_dummy_domain'的http请求,进入'c:\ somepath'并使用最初请求的相同路径和名称获取该文件。查询字符串应该通过。
有些方案需要进一步澄清:
http://some_domain/somefile --> c:\somepath\somefile
http://some_domain/path1/somefile --> c:\somepath\path1\somefile
http://some_domain/path1/somefile?querystring --> c:\somepath\path1\somefile?querystring
我试图利用我已经拥有的东西:
match: regex:(?insx).+//some_dummy_domain/([?a-z0-9-=&]+\.)*
respond: ...
基本上,我在请求中寻找//some_dummy_domain/
。这似乎在测试时正确匹配,但我想知道如何回应。
Fiddler可以在回复中使用匹配,我怎样才能正确设置?
我试图回复c:\somepath\$1
,但Fiddler似乎逐字地对待它:
match: regex:(?insx).+//some_domain/([?a-z0-9-=&]+\.)*
respond: c:\somepath\$1
request: http://some_domain/index.html
response: c:\somepath\$1html <-----------
答案 0 :(得分:7)
问题是你在表达的前面使用insx
; n
表示您需要explicitly-named capture groups,这意味着系统$1
不会自动创建。您可以省略n
或明确命名捕获组。
来自Fiddler Book:
在操作文本中使用RegEx替换
Fiddler的AutoResponder允许您使用正则表达式组替换将匹配条件中的文本映射到操作文本。例如,规则:
匹配文字:REGEX:.+/assets/(.*)
行动文字:http://example.com/mockup/$1
...将http://example.com/assets/Test1.gif
的请求映射到http://example.com/mockup/Test1.gif
。
以下规则:
匹配文字:REGEX:.+example\.com.*
行动文字:http://proxy.webdbg.com/p.cgi?url=$0
...重写入站网址,以便将包含example.com
的所有网址作为网址参数传递给proxy.webdbg.com
上的网页。
匹配文字:REGEX:(?insx).+/assets/(?'fname'[^?]*).*
行动文字C:\src\${fname}
...将http://example.com/assets/img/1.png?bunnies
的请求映射到C:\src\img\1.png
。