【问题标题】:Handling POST parameter differences on identical URLs in Fiddler recording?在 Fiddler 录制中处理相同 URL 上的 POST 参数差异?
【发布时间】:2014-03-26 02:53:32
【问题描述】:

我需要记录我的客户端脚本在第 3 方网络应用程序中的行为。所以我尝试使用 Fiddler 记录第 3 方机器上的流量,然后在这里运行。

听起来不错,但我的脚本对 ASPX (123.aspx) 页面进行 AJAX 调用,并且这些调用仅使用 POST 参数,而不是 GET。

这意味着 Fiddler 中记录的 (123.aspx) 请求 URL 是相同的,并且无法正常播放(每个 AJAX 请求都匹配第一个记录的匹配,而不是具有相同 POST 参数的匹配)。

 E.g. let's says the requests are recorded like this
 123.aspx [POST param: searchquery=xyz]
 123.aspx [POST param: searchquery=abc]

然后当我播放 SAZ 文件时,我总是得到 123.aspx [POST param: searchquery=xyz] 的响应,即使 searchquery=abc。

如果 POST 参数不同,如何让 Fiddler 以不同的方式处理请求?

我看到了提取规则,但对它们有点不确定,Telerik 文档没有返回“提取”的结果......它们是我需要的吗?

谢谢

【问题讨论】:

  • 我最终修改了脚本以使用其中一个参数作为冗余 GET 参数,只是为了使 URL 唯一。这显然需要在第 3 方结束时进行工作,所以我仍然很好奇是否可以在不修改我们的脚本的情况下实现这一点?
  • Fiddler 记录完整的 URL 以及完整的 POST 正文。当你说然后在这里运行时,你到底是什么意思?你的播放效果如何。您是在问有关 Fiddler 的自动回复器的问题吗?当您谈论提取规则时,您是在谈论 Visual Studio WebTest 脚本吗?
  • 谢谢@EricLaw - 我的意思是(或认为我的意思是)让第 3 方向我发送 SAZ 文件(由 fiddlercap 生成),然后让 Fiddler 中的 AutoResponder 处理来自我的浏览器的请求 - 所以我可以调试我们的脚本。因此,发生的情况是,对于随后对同一 URL(不同的 post 参数)的 AJAX 调用,AutoResponder 仅匹配第一个 AJAX 调用。至于提取规则,是的,我可能对 VS 网络测试感到困惑——我以为我在网上看到了一些关于提取 POST 参数的东西......

标签: web fiddler web-testing


【解决方案1】:

请参阅the introductory blog post 了解有关 Fiddler AutoResponder 的Import for Playback 模式的详细信息,该模式有助于解决您在尝试播放之前捕获的 SAZ 文件时可能遇到的一些问题。

现在,“导入播放”模式无法解决所有可能的问题;例如,如果您捕获到同一个 URL 的多个 POST,但它们的顺序与您尝试重放场景时捕获的顺序不同,它们将以错误的顺序播放,事情就会被破坏。


来自Fiddler Book

匹配请求正文

在某些情况下,网站可能会为许多不相关的操作使用相同的请求 URL,在请求正文中指定所需的操作而不是 URL。您可以通过为匹配条件指定 URLWithBody: 前缀来扩展匹配条件以检查 POST 或 PUT 请求的正文。使用此前缀时,字符串中直到第一个空格字符的部分用作请求 URL 的匹配条件,而字符串的其余部分用作请求正文的字符串表示的匹配条件。出于性能原因,您应该尽可能缩小地指定匹配条件的 URL 部分,以尽量减少 AutoResponder 需要评估的请求正文的数量。如果请求没有正文,它将不匹配任何URLWithBody 规则。

您的匹配条件可以为 URL 和正文指定 EXACT:NOT:REGEX: 前缀。例如:

URLWithBody:upload.php TextToFindInBody
URLWithBody:login.php EXACT:Action=Login
URLWithBody:ping.php NOT:POST Data I Do Not Care About
URLWithBody:EXACT:https://example.com/upload.php REGEX:^.+TextToFind.*$
URLWithBody:REGEX:^.+/upload.php.*$ REGEX:^.+TailOfPOST$

请记住,大多数来自 Web 表单的 POST 都会对正文进行编码,因此您应该确保您的匹配条件考虑了这种编码。例如,要匹配以下 POST:

POST http://www.enhanceie.com/sandbox/FileForm.asp HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 54

2=This+is+some+text&fileentry2=&_charset_=windows-1252

你的匹配条件应该是:

URLWithBody:/sandbox/FileForm.asp This+is+some+text

【讨论】:

  • 嘿,Eric,我遇到了一种奇怪的行为(或者我误解了)。我设置了一个URLWithBody 和一个*bpu 的下方。如果在 *bpu 中我选择 Run to completion 并带有预定义的响应,则结束,看起来它忽略了 URLWithBody 规则。
  • 嘿,@VitorCanova:由于这是一个不同的问题,请将其发布到 Fiddler 讨论组或在此处作为新问题发布。请使用 CTRL+C 复制两个规则的全文,以便我确定您的情况是什么。谢谢!
  • 您所说的“提琴手讨论组”是指在 SO 上使用Fiddlertag 发帖?
  • 在 Fiddler 中,单击 Help > Fiddler Community Discussions。或者只是在这里发布Fiddler标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多