2026/1/3 6:15:07
网站建设
项目流程
四川城乡建设部网站,舟山建设银行网站,wordpress访问量插件,wordpress 怎样做模版调试接口用Postman是挺方便#xff0c;但服务器上没图形界面#xff0c;只能用curl。
curl功能强大得离谱#xff0c;但大部分人只会curl一个URL。这篇总结一下我常用的调试技巧。
基础请求
# GET
curl https://api.example.com/users# 带参数的GET
curl https://a…调试接口用Postman是挺方便但服务器上没图形界面只能用curl。curl功能强大得离谱但大部分人只会curl一个URL。这篇总结一下我常用的调试技巧。基础请求# GETcurlhttps://api.example.com/users# 带参数的GETcurlhttps://api.example.com/users?page1size10# POST表单curl-X POST -dusernametestpassword123https://api.example.com/login# POST JSONcurl-X POST\-HContent-Type: application/json\-d{username:test,password:123}\https://api.example.com/login# 从文件读取bodycurl-X POST -d data.json https://api.example.com/users查看详细信息这才是调试的关键。# 显示响应头curl-i https://api.example.com/users# 只显示响应头不要bodycurl-I https://api.example.com/users# 显示请求和响应的全部信息最详细curl-v https://api.example.com/users-v输出很有用能看到DNS解析TCP连接TLS握手发送的请求头收到的响应头* Trying 1.2.3.4:443... * Connected to api.example.com (1.2.3.4) port 443 * TLS handshake... GET /users HTTP/2 Host: api.example.com User-Agent: curl/7.68.0 HTTP/2 200 content-type: application/json ...设置请求头# 单个Headercurl-HAuthorization: Bearer xxxhttps://api.example.com/users# 多个Headercurl-HAuthorization: Bearer xxx\-HX-Request-ID: abc123\-HAccept: application/json\https://api.example.com/users# 覆盖默认的User-Agentcurl-AMyApp/1.0https://api.example.com/users处理响应# 保存响应到文件curl-o response.json https://api.example.com/users# 用服务器返回的文件名curl-O https://example.com/file.zip# 只要响应体用jq格式化需要安装jqcurl-s https://api.example.com/users|jq.# 提取某个字段curl-s https://api.example.com/users|jq.data[0].name-s是静默模式不显示进度条。性能分析这个很实用。排查接口慢的问题时需要知道时间花在哪了。curl-wcurl-format.txt-o /dev/null -s https://api.example.com/userscurl-format.txt内容time_namelookup: %{time_namelookup}s\n time_connect: %{time_connect}s\n time_appconnect: %{time_appconnect}s\n time_pretransfer: %{time_pretransfer}s\n time_redirect: %{time_redirect}s\n time_starttransfer: %{time_starttransfer}s\n ----------\n time_total: %{time_total}s\n输出time_namelookup: 0.012s - DNS解析耗时 time_connect: 0.045s - TCP连接耗时 time_appconnect: 0.156s - TLS握手耗时HTTPS才有 time_pretransfer: 0.156s - 准备传输耗时 time_redirect: 0.000s - 重定向耗时 time_starttransfer: 0.312s - 首字节耗时TTFB ---------- time_total: 0.456s - 总耗时最有用的是time_starttransfer也就是TTFBTime To First Byte能反映服务端的处理时间。嫌建文件麻烦用一行命令curl-o /dev/null -s -wDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\nhttps://api.example.com/users模拟各种场景带Cookie# 发送Cookiecurl-bsessionabc123https://api.example.com/users# 保存响应的Cookie到文件curl-c cookies.txt https://api.example.com/login# 用保存的Cookie发请求curl-b cookies.txt https://api.example.com/users跟随重定向# 默认不跟随加-L跟随curl-L https://example.com/redirect指定DNS解析绕过DNS直接指定IPcurl--resolve api.example.com:443:1.2.3.4 https://api.example.com/users测试新服务器时很有用不用改hosts。忽略证书错误测试环境的自签名证书curl-k https://test.internal.com/api生产环境别用-k。限速测试慢网络情况# 限制下载速度为100KB/scurl--limit-rate 100K https://example.com/file.zip设置超时# 连接超时5秒curl--connect-timeout5https://api.example.com/users# 整体超时10秒curl-m10https://api.example.com/users重试# 失败重试3次curl--retry3https://api.example.com/users# 重试间隔2秒curl--retry3--retry-delay2https://api.example.com/users文件上传# 上传文件curl-Ffile/path/to/file.jpghttps://api.example.com/upload# 带其他参数curl-Ffile/path/to/file.jpg-Fnametesthttps://api.example.com/upload# 指定文件类型curl-Ffile/path/to/file.jpg;typeimage/jpeghttps://api.example.com/upload代理设置# HTTP代理curl-x http://proxy.example.com:8080 https://api.example.com/users# SOCKS5代理curl--socks5127.0.0.1:1080 https://api.example.com/users调试HTTPS# 显示TLS握手细节curl-v --trace-ascii - https://api.example.com/users# 指定TLS版本curl--tlsv1.2 https://api.example.com/users# 查看证书信息curl-vI https://api.example.com21|grep-A6Server certificate实用场景测试接口是否正常# 只关心状态码curl-s -o /dev/null -w%{http_code}https://api.example.com/health批量测试# 测试10次看平均响应时间foriin{1..10};docurl-s -o /dev/null -w%{time_total}\nhttps://api.example.com/usersdone对比两个环境# 测试环境curl-s https://test.example.com/api/users|md5sum# 生产环境curl-s https://api.example.com/users|md5sum响应一样就md5一样。生成代码curl可以直接生成各种语言的代码# 转成Pythoncurlhttps://api.example.com/users --libcurl output.py# 或者用在线工具把curl命令转成代码常用alias加到/.bashrc或/.zshrc# 格式化JSON响应aliascurljsoncurl -s | jq .# 只看状态码aliascurlcodecurl -s -o /dev/null -w %{http_code}\n# 带详细信息aliascurlvcurl -v# 带性能信息aliascurltimecurl -o /dev/null -s -w DNS: %{time_namelookup}s | Connect: %{time_connect}s | TTFB: %{time_starttransfer}s | Total: %{time_total}s\n用起来curljson https://api.example.com/users curlcode https://api.example.com/health curltime https://api.example.com/userscurl的参数太多没必要都记住。知道有这些功能用的时候来查就行。跨服务器调试时如果网络不通我一般用星空组网先把几台机器串起来然后curl各种测。