| 经常爬虫的朋友都知道, 有时候找接口参数变化
 用肉眼对比很麻烦
 所以写了一个实时高亮对比的工具
 
 以下是源码
 
 
 
 [AppleScript] 纯文本查看 复制代码 // 在 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[i]}</span>");
            }
            else if (i >= url2.Length)
            {
                highlightedUrl1.Append($"<span style='color:red;'>{url1[i]}</span>");
            }
            else if (url1[i] != url2[i])
            {
                highlightedUrl1.Append($"<span style='color:red;'>{url1[i]}</span>");
                highlightedUrl2.Append($"<span style='color:red;'>{url2[i]}</span>");
            }
            else
            {
                highlightedUrl1.Append(url1[i]);
                highlightedUrl2.Append(url2[i]);
            }
        }
        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[key] = query[key];
            }
            // 格式化查询参数并构建新 URL
            var newQueryString = System.Web.HttpUtility.ParseQueryString(string.Empty);
            foreach (var pair in queryParams)
            {
                newQueryString[pair.Key] = 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;
        }
    }
}
 
 
 |