如何配置Fiddler的Autoresponder将主机映射到文件夹?

6

我已经在使用 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        <-----------

你尝试过正则表达式的反向引用语法,例如\1$1等吗? - Lucas Trzesniewski
@LucasTrzesniewski 我已经做了,我忘了提到它。修改了问题。 - Alex
1个回答

10
问题在于你在表达式的开头使用了insxn表示你想要显式命名捕获组,这意味着组$1不会自动创建。你可以省略n或显式命名捕获组。
来自Fiddler Book:
在操作文本中使用正则表达式替换
Fiddler的AutoResponder允许您使用正则表达式组替换将匹配条件的文本映射到操作文本中。例如,规则:
匹配文本:REGEX:.+/assets/(.*)
操作文本:http://example.com/mockup/$1

...将请求http://example.com/assets/Test1.gif映射到http://example.com/mockup/Test1.gif
以下规则:
匹配文本:REGEX:.+example\.com.* Action Text: http://proxy.webdbg.com/p.cgi?url=$0

...重写入站URL,以便将包含example.com的所有URL作为URL参数传递到proxy.webdbg.com上的页面。

Match Text: REGEX:(?insx).+/assets/(?'fname'[^?]*).*

Action Text C:\src\${fname}

...将对http://example.com/‌assets/img/1.png?bunnies的请求映射到C:\src\‌img\‌1.png


啊,我明白了,我没有好好看TFM。在我的最后一个“match”中省略了“n”就解决了问题。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接