Skip to content
nihaocssPublic

About

把 cURL / HAR / 请求列表 JSON 转成干净的 URL,并定位失败请求

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

curl2url

把开发者工具里「Copy as cURL」或 HAR 导出内容,变成干净的 URL;顺带把请求参数、请求头、请求体、失败响应拆开看。

专治微信开发者工具 / Chrome 网络面板:右键只能复制 cURL,粘出来一堆 header、cookie、body;或者 HAR 文件太大没法看。两种都直接粘进来即可。

还带一个截图转文字:报错截图直接 Ctrl+V,默认用 Windows 自带 OCR 在本机识别,也可以配置豆包 / 通义千问 / OpenAI 等视觉模型识别,一键复制给 AI,不用再发图片。

以及一个日志翻译助手:把 Java / Spring / K8s / SQL 日志粘进来,自动去掉重复心跳和框架刷屏,翻译成「一句话 / 发生了什么 / 关键信息 / 有没有报错 / 建议下一步」的中文报告,不用先看懂英文堆栈。

还带一个数据库排查台:直连 MySQL / Redis,浏览库表与 Key、执行查询、查看执行计划、编辑数据(需显式开启),并把 SQL、错误和结果预览交给 AI 分析。

下载安装

  • Windows(推荐):直接下载 curl2url.exe,免安装,双击运行。需要 Windows 10 / 11(.NET Framework 4.8 自带)。本地截图识别用的是系统自带 OCR,中文 Windows 默认已装 zh-Hans-CN 语言包,无需联网;想更准可以再配 AI 识别(可选,联网)。
  • macOS / Linux:没有 GUI 安装包,可安装 Node.js 后使用仓库里的 curl2url.js 命令行。
  • iOS / Android:不支持。本项目是 Windows 桌面工具,没有移动端版本。

程序未做数字签名,Windows 首次运行时可能出现 SmartScreen 提示,选择「更多信息 → 仍要运行」即可。

平台支持

平台 支持情况
Windows ✅ 提供 exe,免安装
macOS / Linux ⚠️ 仅 Node 命令行
iOS / Android ❌ 无移动端版本

快速开始(桌面版)

双击桌面的 curl2url 快捷方式(或直接运行 curl2url.exe)。

  • 打开时如果剪贴板里是 cURL 或 HAR,会自动载入
  • 粘贴后自动解析,不需要点按钮;Ctrl+Enter 可立即刷新。大 HAR 在后台解析,不会卡住窗口;解析中可点「取消解析」,继续编辑或粘贴后会自动解析最新内容
  • 界面八个页签:
    • URL:提取出的地址(勾选「隐藏长参数 / Token」时,token 会打码)
    • 请求详情:每个请求的 URL、方法、状态、查询参数、请求头、请求体(JSON 自动格式化)
    • 失败请求:HAR 里状态码 ≥ 400、被拦截或无响应的请求,保留 URL、请求参数、响应头和响应体;选中一条后可点「AI 诊断(联网)」,让 AI 结合请求 / 响应给出失败原因和验证步骤
    • 性能:按当前筛选统计请求数、失败数、总耗时、平均耗时,列出最慢的 10 个请求和按域名聚合的耗时 / 失败数(耗时来自 HAR 的 entry.time;cURL 和请求列表 JSON 没有耗时数据)
    • 响应:仍可手动粘贴单条返回值,一键格式化 JSON
    • 截图识别:微信 / QQ 截图后直接 Ctrl+V(或点「粘贴图片」「打开图片」,也可以把图片文件拖进窗口),自动识别报错文字;识别结果可一键复制给 AI。左侧缩略图双击可放大,支持缩放、拖动和 Esc 关闭
    • 日志翻译:粘贴或拖入 .log / .txt,自动去噪并生成中文诊断报告;支持 只看错误、按 traceId 分组,也可选 AI 解读(联网)
    • 数据库排查:直连 MySQL / Redis,浏览表与 Key、执行查询、编辑数据、一键复制 / 导出结果;支持用中文让 AI 生成只读 SQL 并执行,也可对结果做 AI 分析;默认只读,写权限按连接单独开启
  • 右上角显示当前版本,并可「检查更新」(读取 GitHub 最新 Release,有新版本时可直接打开下载页;系统代理被 GitHub API 限流时会自动尝试直连和 Releases 页面);「使用教程」解释开发者工具里各种 Copy 格式(Copy link address / request headers / response / as cURL / all as HAR 等)分别会复制到什么,以及该选哪个
  • URL / 请求详情 / 失败请求 / 性能上方有筛选栏:可按 URL 关键字、域名、HTTP 方法、状态码(2xx / 4xx / 5xx / 失败)组合过滤;关键字输入有 250ms 防抖,右侧显示「显示 N / M 个请求」。筛选只重绘结果,不会重新解析原始内容
  • 窗口位置、大小、是否最大化以及上次所在页签会保存到 %APPDATA%\curl2url\ui-state.json,下次启动恢复;如果显示器布局变了导致窗口跑出屏幕,会自动回退到默认位置
  • 勾选「保留响应」后,「请求详情」会在每个请求下面显示响应头和响应体;不勾选则只看请求侧信息。cURL 本身不含响应,只有 HAR / 请求列表才有
  • 「识别方式」可选本地 OCR(离线,默认)或AI 识别(联网,更准);点「AI 设置」配置服务商和 Key。AI 请求失败时会自动回退到本地 OCR,并在状态栏标明
  • 本地识别完全在本机完成,不上传图片;小字号截图会自动放大后再识别。中文 OCR 引擎本身也能识别英文报错,纯英文行会把误判的全角标点转回半角(https:// → https://);个别字母可能混淆(l / 1、O / 0),贴给 AI 前扫一眼即可
  • HAR 支持:点「打开 HAR 文件」、把 .har 文件拖进窗口,或直接粘贴 JSON
  • 默认按 URL 去重;支持 http://、https://、ws://、wss://
  • 默认隐藏超长参数值和 token / sign / session / cookie / authorization 一类字段
  • 请求详情 / 失败请求里自动隐藏 User-Agent、Accept-Language、Sec-Fetch-*、Vary、X-Powered-By、缓存控制等浏览器 / 网关通用头,末尾提示隐藏了几个;只保留 Origin、Referer、Content-Type、Cookie、自定义头和 X-Request-Id / X-Trace-Id 这类追踪头
  • 勾选「保留响应」时,响应头里的 CORS(Access-Control-*)、跨域策略、缓存 / 安全策略等通用头也会隐藏,完全重复的头会合并;保留 Content-Type、Set-Cookie、Location、X-Request-Id / X-Trace-Id 等有用字段
  • openid / openId 不参与打码,始终完整显示
  • 下方结果框(URL / 请求详情 / 失败请求 / 性能 / 日志翻译)可直接 Ctrl+A 全选、Ctrl+C 复制(没选区时复制整页);也可以右键选「全选 / 复制 / 全选并复制」
  • 「失败请求 → AI 诊断」只发送当前选中的那一条请求,请求头里的 Token / Cookie / Authorization 和请求体中的敏感字段会先打码;AI 返回结果可以一键复制

注意:cURL 只包含请求,不包含响应,所以无法判断失败请求;要识别错误请求请用 HAR(Network 面板右键 → Save all as HAR),或带 statusCode / responseBody 的请求列表 JSON。

AI 识别(可选)

系统 OCR 对字号很小的代码截图、深色背景、被弹窗遮挡的报错容易认错(l / 1、rn / m),这时可以换成视觉大模型,整段还原度会高很多。

  1. 在「截图识别」页把「识别方式」切到 AI 识别(联网,更准);未配置时会自动弹出设置窗口

  2. 选服务商,填入 API Key(模型 ID 以服务商控制台为准,也可以填火山方舟的「接入点 ID」):

    服务商 接口地址 默认模型
    豆包(火山方舟) https://ark.cn-beijing.volces.com/api/v3/chat/completions doubao-seed-2-0-lite-260215
    通义千问(阿里云) https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions qwen-vl-max
    OpenAI https://api.openai.com/v1/chat/completions gpt-4o-mini
    自定义 任意 OpenAI 兼容 /chat/completions 地址 自行填写
  3. 点「测试连接」确认接口、模型和 Key 可用,再「保存」

说明:

  • 隐私:AI 识别会把截图发送到你配置的服务商,不便外发的截图请切回「本地 OCR(离线)」
  • Key 存储:只保存在本机,用 Windows DPAPI(当前用户)加密,文件位于 %APPDATA%\curl2url\ai-ocr.json
  • AI 诊断失败请求:复用这里的接口和 Key,「失败请求」页只发送当前选中的一条请求(通用头已省略,Token / Cookie / 密码等已打码),不会上传整份 HAR
  • 自动回退:AI 超时、Key 失效、余额不足等失败时会自动改用本地 OCR,状态栏会提示原因
  • 请求参数固定 temperature: 0、stream: false;图片会先缩到最长边 2400 像素再上传,避免超出体积限制
  • 高级用法:设置环境变量 CURL2URL_AI_URL / CURL2URL_AI_MODEL / CURL2URL_AI_KEY 可临时覆盖配置(不写入磁盘);CURL2URL_AI_CONFIG 可指定配置文件路径

日志翻译助手(Log Explainer)

「日志翻译」页签把一大段 Java / Spring / K8s / SQL 日志整理成固定结构的中文报告:

  • 一句话:这段日志到底发生了什么
  • 发生了什么:时间范围、traceId 数量、接口调用次数、关键动作和噪音折叠情况
  • 关键信息:服务 / 模块、Controller、接口、traceId、手机号(打码)、业务标识、SQL 及参数示例
  • 有没有报错:异常中文含义、Caused by 根因、业务堆栈、针对性建议
  • 建议下一步:按优先级给出排查动作

默认开启「过滤噪音」:重复心跳、健康检查、size: 0 定时任务、MyBatis SqlSession 等框架刷屏、连续重复 INFO 会折叠,并在末尾说明折叠了多少行。另外两个开关:

  • 只看错误:只保留 ERROR / WARN / Exception 及其前后 5 行上下文(包括相关的请求、HTTP 状态和 K8s 事件)
  • 按 traceId 分组:多个 traceId 时先列目录,再分别讲「这一次请求的故事」;单 traceId 直接给出完整经过

识别范围:

  • [UHLOG]开始请求URI[...]、HTTP 方法 / 路径、Controller 日志
  • Exception / Caused by、Spring 单行 nested exception is ... 异常链(逐层拆开并标出根因)、业务堆栈(自动过滤 Spring / JDK 框架帧);同一异常链重复出现会合并并计数
  • JDK 原生反序列化失败(SerializationFailedException / DefaultDeserializer / NestedIOException / ClassNotFoundException):会点明“不是 JSON 字段不匹配”,并按「Redis 旧缓存 / 旧消息 / DTO 被删除改名 / jar 漏打包」给出排查顺序
  • AppKey / 签名校验失败
  • MyBatis Preparing: + Parameters:(SQL 与参数示例都会打码)
  • K8s Ready 1/1、Restarts、CrashLoopBackOff、OOMKilled、探针失败
  • 手机号、业务单号、HTTP 4xx / 5xx

大日志:支持一次粘贴 1 万字以上;超长时优先保留错误段和关键行,并在报告里提示截断。

隐私:本地分析完全离线,不会上传日志。点「AI 解读(联网)」时,才会把本机报告和过滤后的日志摘录(手机号、Authorization、Cookie、token / password / secret 等已打码)发送到「截图识别 → AI 设置」里配置的服务商;AI 失败不会清空本地报告。

AI 解读的提示词按资深 Java 后端 / 中间件 / SRE 的口径约束:先列事实,再写推断,推断必须带「很可能」和依据;区分 JDK 序列化与 JSON 解析问题;对 ClassNotFound 优先考虑 Redis 旧缓存 / 旧消息 / DTO 删除改名或 jar 缺类,而不是笼统归因于“字段不匹配”;最后给出可直接执行的排查命令。

数据库排查台(MySQL / Redis)

「数据库排查」页签可以直接连接 MySQL 和 Redis,不需要另外装客户端。连接配置只保存在本机,密码用 Windows DPAPI(当前用户)加密,文件位于 %APPDATA%\curl2url\db-connections.json;也可以用环境变量 CURL2URL_DB_CONFIG 指定配置路径。

连接管理

  • 新建 / 编辑 / 删除连接,可先「测试连接」再保存
  • 连接和密码保存在本机(密码 DPAPI 加密),下次打开自动选中上次的连接记录;切到「数据库排查」页时自动重连上次使用的连接,并回到上次的库
  • 生产库不会自动连接,需要手动点「连接」
  • 支持环境标记:本地 / 测试 / 预发 / 生产;连接默认只读
  • 写权限按连接单独开启;生产环境开启写权限时,保存前必须手动输入「生产」二次确认

MySQL

  • 左侧库表树,支持按表名搜索;单击库切换默认库,双击表加载数据
  • SQL 编辑器:Ctrl+Enter 或 F5 执行,Esc 取消;默认最多返回 500 行
  • 「解释」查看执行计划;查询结果和表数据都可一键「复制」,复制为含表头的 TSV,直接粘贴到 Excel / 飞书表格;也可导出 CSV
  • 「AI 查询」:不会写 SQL 时直接用中文描述需求,AI 按当前库的表名、字段名和字段注释生成一条只读 SQL,写进编辑器并执行;表多时会按问题关键词匹配表 / 字段注释,把相关表优先送进模型(「卡卷」这类常见错字也会按「卡券」匹配);生成的 SQL 会再次经过只读闸门,写语句一律拦截
  • 「表数据」页:基于主键定位,支持新增行、删除行、单元格编辑、设为 NULL、保存 / 放弃更改;保存走事务,没有主键或视图不可编辑
  • 「表结构」页:字段、类型、可空、默认值、注释以及 CREATE TABLE 原文
  • 只读模式在会话级设置 SET SESSION TRANSACTION READ ONLY,客户端同时限制为单条只读语句;FOR UPDATE、INTO OUTFILE、多语句和服务器管理语句会被拒绝
  • 写模式也会拦截 SET GLOBAL / SET PASSWORD / GRANT / KILL / SHUTDOWN 等管理语句;无 WHERE 的 UPDATE / DELETE 和 DDL 会额外弹窗确认

Redis

  • 支持密码、TLS、自签证书和 Cluster;连接后显示版本、节点数、DBSIZE、集群状态
  • 用 SCAN 分页遍历,不阻塞 Redis;支持匹配模式、继续扫描 / 重新开始,列表显示 Key、类型、TTL 和所在节点
  • 双击 Key 查看值:string、hash、list、set、zset、stream;大 Key 会截断并提示
  • 写权限开启后可修改字符串、设置 / 移除 TTL、重命名和删除 Key,每次写入都要确认
  • 命令控制台支持单条 Redis 命令,写命令需显式开启写权限;FLUSHALL / FLUSHDB / CONFIG / EVAL / SCRIPT / SHUTDOWN / KEYS / MONITOR / SUBSCRIBE / MULTI 等危险或阻塞命令始终禁用
  • Cluster 下会按 Key 槽位路由,并自动跟随 MOVED / ASK 重定向

AI 分析

  • MySQL:对当前 SQL、错误、表结构和结果前 15 行做分析;Redis:对当前命令、Key 类型 / TTL 和值预览做分析
  • AI 查询只发送表名、字段名和字段注释,不发送数据行
  • 必须手动点击「AI 分析」/「AI 生成并执行」才会发送;发送前再次确认,敏感列 / Key 会先打码,不发送密码
  • 复用「截图识别 → AI 设置」里的服务商和 Key,不额外配置

不要在生产库上直接试验删改。工具的安全限制是兜底,不是权限系统;数据库账号本身仍应遵循最小权限原则。

支持的格式

  • 一次粘贴多条 curl(批量复制所有请求)
  • 自动识别 HAR(Chrome / 微信开发者工具 / Charles 导出的 JSON)
  • HAR 轻微损坏也能尽量打开:在线 HAR 查看器有时会把嵌套 JSON 直接塞进 postData.text / content.text,不转义换行和引号,甚至把文件尾部截断。遇到这种情况会保留损坏点之前的完整请求继续解析,并在状态栏和「请求详情」顶部提示「已忽略损坏位置之后的内容」,不再整份文件报解析失败
  • 自动识别第三方抓包插件导出的请求列表 JSON(顶层数组,元素含 url、requestHeaders、requestBody、statusCode、responseBody、curlRequest 等字段),同样支持提取 URL 和识别失败请求
  • bash \、cmd ^、PowerShell 反引号续行
  • 单引号 / 双引号 / 无引号 URL
  • --url 参数形式
  • JSON 转义:\u0026 → &、\/ → /
  • -X/--request、-H/--header、-d/--data* 参数解析
  • Referer、Origin 等 header 里的 URL 不会被误提取(只取 curl 的目标地址)
  • 直接粘贴纯 URL 也能识别

命令行

# 从标准输入提取 URL(只打印,不碰剪贴板;加 --mask 隐藏长参数 / Token)
Get-Content curl.txt | .\curl2url.exe --extract --mask

# 输出请求详情(--mask 隐藏长 Token / 敏感参数;--responses 同时输出响应头和响应体)
Get-Content curl.txt | .\curl2url.exe --details --mask
Get-Content network.har | .\curl2url.exe --details --mask --responses

# 只看失败请求(需要 HAR 或带 statusCode 的请求列表 JSON,cURL 不含响应状态)
Get-Content network.har | .\curl2url.exe --failures --mask

# 截图转文字(Windows 自带 OCR,识别结果打印到标准输出)
.\curl2url.exe --ocr error.png

# 用已配置的 AI 识别(需先在图形界面「AI 设置」里配置,或设置 CURL2URL_AI_* 环境变量)
.\curl2url.exe --ocr-ai error.png

# 自检(不会弹窗口)
.\curl2url.exe --selftest

旧版 Node 命令行仍然保留:

# 剪贴板 -> 剪贴板
.\curl2url.cmd

# 从文件读,结果写回剪贴板
.\curl2url.cmd -f curl.txt

# 只打印,不碰剪贴板
Get-Clipboard | node .\curl2url.js -s -n
选项 说明
-f, --file <路径> 从文件读取(Node 版)
-s, --stdin 从标准输入读取(Node 版)
-k, --keep-duplicates 保留重复 URL(默认去重,Node 版)
-1, --first 只输出第一个 URL(Node 版)
-n, --no-clipboard 不写回剪贴板(Node 版)
-h, --help 显示帮助(Node 版)

重新编译(可选)

不需要安装 Visual Studio,用的是 Windows 自带的 .NET Framework 4.8 编译器。MySQL 驱动放在 vendor/,编译时作为引用并嵌入 exe,运行时仍然只有一个 exe:

build.cmd

build.cmd 等价于下面这条命令(在仓库根目录执行):

set CSC=%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\csc.exe
%CSC% -target:winexe -codepage:65001 -optimize+ -out:curl2url.exe ^
  -reference:System.Windows.Forms.dll -reference:System.Drawing.dll ^
  -reference:System.Security.dll -reference:System.Data.dll ^
  -reference:"%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\System.Web.Extensions.dll" ^
  -reference:vendor\MySqlConnector.dll ^
  -reference:vendor\System.Memory.dll -reference:vendor\System.Buffers.dll ^
  -reference:vendor\System.Threading.Tasks.Extensions.dll ^
  -reference:vendor\System.Runtime.CompilerServices.Unsafe.dll ^
  -resource:vendor\MySqlConnector.dll,MySqlConnector.dll ^
  -resource:vendor\System.Memory.dll,System.Memory.dll ^
  -resource:vendor\System.Buffers.dll,System.Buffers.dll ^
  -resource:vendor\System.Threading.Tasks.Extensions.dll,System.Threading.Tasks.Extensions.dll ^
  -resource:vendor\System.Runtime.CompilerServices.Unsafe.dll,System.Runtime.CompilerServices.Unsafe.dll ^
  -win32icon:curl2url.ico -win32manifest:curl2url.manifest ^
  -recurse:src\*.cs Curl2UrlApp.cs

注意:-recurse 必须用反斜杠路径 src\*.cs;写成 src/*.cs 时旧版 csc 会静默跳过子目录。编译完成后建议跑一次 curl2url.exe --selftest(无窗口、无网络,覆盖 SQL / Redis 安全闸门、CSV、DPAPI 和驱动加载)。build.cmd 会覆盖当前目录的 curl2url.exe,运行中的程序请先退出。

架构说明见 ARCHITECTURE.md,第三方组件许可见 THIRD-PARTY-NOTICES.md。

注意

  • 输出顺序与 curl 出现顺序一致,默认对完全相同的 URL 去重
  • 查询参数按原始编码展示,不做 URL 解码
  • curl2url.exe 是本地编译的,不依赖 Node;Node 版命令行仍然需要 Node.js
  • 仓库里的 curl2url.exe 已编译好,可直接运行;修改源码后按上面的命令重新编译

开源协议

MIT License,见 LICENSE。

About

把 cURL / HAR / 请求列表 JSON 转成干净的 URL,并定位失败请求

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages