如何从cURL输出日志中提取批量请求的原始URL地址
实现方案
原生curl暂不支持直接将verbose日志中Trying行的IP替换为原始URL,可通过curl自带参数实现每个请求绑定原始URL的效果,无需依赖其他HTTP工具:
方案1:纯curl原生实现(适配curl 7.20.0及以上版本)
使用--next参数分隔多个请求,搭配--write-out参数和内置变量%{url_effective},在每个请求的日志末尾追加对应原始URL,命令示例:
curl --head --verbose --connect-timeout 3 \ --write-out "%{stderr}\n[原始请求URL] %{url_effective}\n" \ https://imap.gmail.com/ \ --next \ --head --verbose --connect-timeout 3 \ --write-out "%{stderr}\n[原始请求URL] %{url_effective}\n" \ https://www.google.com/
其中%{stderr}是curl 7.81.0及以上版本支持的标识,作用是把URL输出到标准错误流,和verbose日志属于同一输出流,避免和请求成功的响应内容混淆。如果你的curl版本更低,去掉%{stderr}即可。
方案2:搭配极简shell循环实现请求前打印URL
如果允许使用基础shell逻辑(不需要替换curl为其他工具),可以直接实现请求前输出原始URL的效果,完全匹配你给出的示例格式,命令示例:
for url in "https://imap.gmail.com/" "https://www.google.com/"; do echo -e "\n$url" curl --head --verbose --connect-timeout 3 "$url" done
输出效果为每个请求的verbose日志前都会先打印对应的原始URL,无论请求成功或失败都可以直接匹配对应关系。
两种方案均可稳定匹配请求日志和原始URL的对应关系,满足日志解析需求。
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

