csx 发表于 2024-8-23 00:11

分享一个URL参数对比的fiddler脚本源码

经常爬虫的朋友都知道,
有时候找接口参数变化
用肉眼对比很麻烦
所以写了一个实时高亮对比的工具

以下是源码


// 在 FiddlerScript 的自定义脚本中使用的代码
public static class URLComparer
{
    // 用于存储上一个请求的 URL
    private static string lastUrl = string.Empty;

    // 比较两个 URL 并高亮显示差异
    private static string HighlightDifferences(string url1, string url2)
    {
      var highlightedUrl1 = new System.Text.StringBuilder();
      var highlightedUrl2 = new System.Text.StringBuilder();

      // 使用 SequenceMatcher 进行差异比较
      var diff = new System.Collections.Generic.List<string>();

      for (int i = 0; i < url1.Length || i < url2.Length; i++)
      {
            if (i >= url1.Length)
            {
                highlightedUrl2.Append($"<span style='color:red;'>{url2}</span>");
            }
            else if (i >= url2.Length)
            {
                highlightedUrl1.Append($"<span style='color:red;'>{url1}</span>");
            }
            else if (url1 != url2)
            {
                highlightedUrl1.Append($"<span style='color:red;'>{url1}</span>");
                highlightedUrl2.Append($"<span style='color:red;'>{url2}</span>");
            }
            else
            {
                highlightedUrl1.Append(url1);
                highlightedUrl2.Append(url2);
            }
      }

      return $"<div>URL1: {highlightedUrl1.ToString()}</div><div>URL2: {highlightedUrl2.ToString()}</div>";
    }

    // 处理请求的逻辑
    public static void OnBeforeRequest(Session oSession)
    {
      if (oSession.uriContains("feeds?"))
      {
            // 提取 URL 查询参数
            var currentUrl = oSession.fullUrl;
            var queryParams = new System.Collections.Generic.Dictionary<string, string>();

            var uri = new System.Uri(currentUrl);
            var query = System.Web.HttpUtility.ParseQueryString(uri.Query);

            foreach (string key in query.Keys)
            {
                queryParams = query;
            }

            // 格式化查询参数并构建新 URL
            var newQueryString = System.Web.HttpUtility.ParseQueryString(string.Empty);
            foreach (var pair in queryParams)
            {
                newQueryString = pair.Value;
            }
            var newUrl = uri.GetLeftPart(System.UriPartial.Path) + "?" + newQueryString.ToString();

            // 比较并高亮显示差异
            if (!string.IsNullOrEmpty(lastUrl))
            {
                string result = HighlightDifferences(lastUrl, newUrl);
                // 输出到 Fiddler 的日志中
                FiddlerApplication.Log.LogString(result);
            }

            // 更新 lastUrl
            lastUrl = newUrl;
      }
    }
}


页: [1]
查看完整版本: 分享一个URL参数对比的fiddler脚本源码