用 Go 实现的轻量 curl 替代工具,专注易用、高性能、低内存占用,支持常用 curl 参数与压测能力。
go build -o curl-go或者直接使用本地构建产物:./curl-go
# 最简单的请求
./curl-go https://httpbin.org/get
# 指定方法、头和 Body
./curl-go -X POST -H "Content-Type: application/json" --json '{"a":1}' https://httpbin.org/post
# 仅输出状态码
./curl-go --x-sc https://httpbin.org/status/201
# 跟随重定向并打印响应头
./curl-go -L -i http://httpbin.org/redirect-to?url=https://example.com
# 以 JSON 输出结果
./curl-go --json-out https://httpbin.org/get
# 并发压测(每秒 50 个请求、持续 10 秒,仅摘要)
./curl-go --duration 10 --rate 50 --summary https://httpbin.org/get
# 将响应落盘
./curl-go -o out.html https://example.com
# 并发落盘(每条独立文件),Index 占位
./curl-go --concurrency 5 --repeat 20 \
--output-template out-{index}.bin https://httpbin.org/bytes/256- HTTP 方法:GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS(
-X) - 头部:
-H可重复 - Body:
-d、--json、--data-urlencode、-F(multipart) - URL 查询:
-G与--url-query - Cookie:
-b设置、-c/--cookie-jar持久化 - 代理:
--proxy/-x - 超时:
-m(整体)、--connect-timeout(连接阶段) - 重定向:
-L与--max-redirs - TLS:
-k跳过校验 - HTTP 版本:
--http1.0/--http1.1/--http2 - Range:
-r/--range - 失败不输出正文:
-f/--fail - 重试:
--retry、--retry-delay、--retry-max-time - 输出:
-i(包含响应头)、-o/-O/-J、--output-dir、--create-dirs - 并发/压测:
--concurrency、--repeat、--duration、--rate、--summary、--summary-json - 匹配:
--expect-string(正文包含检测) - 压缩:
--compressed(请求 gzip)/--raw(返回原始压缩体) - JSON 输出:
--json-out,可配--json-body-plain - 耗时追踪:
--trace(DNS/TCP/TLS/TTFB/Total) - UA:
-A自定义 - Write-out:
-w/--write-out支持占位(见下) - 多语言帮助:
--help-lang zh|en - 精简摘要:
--pretty/--no-pretty - 并发落盘模板:
--output-template out-{index}.bin - 快速提取:
--x-sc(状态码)、--x-server、--x-ct、--x-proto、--x-url、--x-loc、--x-header Name、--x-sep SEP
支持(不完全列表):
%{http_code}/%{response_code}%{time_total}%{time_dns}%{time_tcp}%{time_tls}%{time_ttfb}(单位:秒,保留 3 位小数)%{size_download}%{method}%{proto}%{url_effective}%{content_type}%{redirect_url}(若存在Location)%{filename_effective}(基于 URL 推断)%{scheme}(http/https)
示例:
./curl-go -w "code=%{http_code} proto=%{proto} total=%{time_total}s ttfb=%{time_ttfb}s\n" https://example.com- 定速压测:
--duration配合--rate,可选--summary/--summary-json输出总览 - 并发多次:
--concurrency+--repeat - 内存优化:摘要模式下使用固定桶直方图估分位,不存储全部样本;非摘要下也提供简要 stderr 总览
- 连接复用:自动丢弃不需要的响应体以保持连接池健康
- 建议:压测时默认
--no-jar+--no-body(可被显式覆盖)
- 单次请求:
-o指定文件-O使用远端名-J使用Content-Disposition--output-dir/--create-dirs
- 并发/多次:
--output-template按{index}生成多个文件,可与--output-dir组合
./curl-go --help-lang en --help
./curl-go --help-lang zh --helpgo build -o curl-go
go test ./...- 采用
http.Transport调优:MaxIdleConns/MaxIdleConnsPerHost/IdleConnTimeout - 流式输出:文件与 stdout 在单次请求路径走边写边匹配,避免大内存峰值
- 复用请求体:为可重试的请求设置
GetBody - 直方图统计:压测摘要无需保存全部样本