API 调试神器 Curlie:一个比 curl 和 httpie 更好用的命令行工具

文摘   2024-10-31 09:35   湖北  

📢 本文将带你了解一款新的 HTTP 调试神器:Curlie。它结合了 curl 的强大功能和 httpie 的易用性,让你的 API 调试工作事半功工倍!

🤔 为什么需要 Curlie?

作为开发者,我们经常需要和各种 API 打交道。虽然有 Postman 这样的图形化工具,但在某些场景下(比如服务器维护、自动化脚本等),命令行工具往往更加高效。

传统的选择通常是:

  • curl:功能强大但命令较复杂
  • httpie:易用但可能缺少一些高级功能

而 Curlie 就像是这两者的"完美结合体",它:

  • 保留了 curl 的所有强大功能
  • 采用了 httpie 的简洁语法
  • 还加入了很多现代化的改进

🚀 Curlie 的优势

1. 超级简单的安装

# macOS 用户
brew install curlie

# Go 用户
go install github.com/rs/curlie@latest

2. 优雅的命令语法

看看这些例子就知道有多简单了:

# GET 请求
curlie api.example.com/users

# POST JSON 数据
curlie post api.example.com/users \
    name=张三 \
    age:=25 \
    active:=true

# 上传文件
curlie -F post api.example.com/upload \
    file@./photo.jpg

3. 颜值即正义

Curlie 的输出颜值有多高?看图说话:

  • 自动格式化 JSON
  • 语法高亮显示
  • 清晰的请求/响应分隔
  • 友好的错误提示

4. 调试功能满分

# 查看详细请求信息
curlie -v api.example.com/users

# 只看响应头
curlie -I api.example.com/status

# 导出 curl 命令(方便分享)
curlie --curl api.example.com/data

💡 实用小技巧

技巧一:快速切换工具

# 在 .bashrc 或 .zshrc 中添加
alias curl="curlie"

技巧二:保存常用配置

# ~/.curlierc
--compressed
--max-time 30

技巧三:使用会话功能

# 保存登录会话
curlie --session=login post api.example.com/login \
    username=admin password=123456

# 使用已保存的会话
curlie --session=login api.example.com/profile

🌰 实战案例

案例一:调试微信公众号 API

curlie post api.weixin.qq.com/cgi-bin/token \
    grant_type=client_credential \
    appid=YOUR_APPID \
    secret=YOUR_SECRET

案例二:上传文件到阿里云 OSS

curlie -F put oss.aliyuncs.com/bucket/object \
    file@./file.zip \
    Authorization:"OSS ${ACCESS_KEY_ID}:${SIGNATURE}"

案例三:调试支付接口

curlie post api.example.com/pay \
    order_id:=12345 \
    amount:=99.99 \
    currency=CNY \
    Authorization:"Bearer ${TOKEN}"

🎯 最佳实践建议

  1. 合理使用详细模式

  • 开发时使用 -v 查看完整请求详情
  • 生产环境脚本去掉详细输出
  • 善用输出重定向

    # 保存响应到文件
    curlie api.example.com/data > response.json
  • 设置超时保护

    curlie --max-time 10 api.example.com/data

  • 1. 请求头语法
    # 使用冒号 : 表示请求头
    curlie api.example.com \
        Authorization:"Bearer token123" \
        Content-Type:application/json \
        Accept:application/json

    2. 请求体语法
    # 使用 = 表示字符串
    # 使用 := 表示数字、布尔值、null 或 JSON
    curlie post api.example.com \
        name=John \           # 字符串
        age:=25 \            # 数字
        active:=true \       # 布尔值
        data:=null \         # null
        tags:='["a","b"]'    # JSON 数组

    3. 同时使用请求头和请求体
    curlie post api.example.com \
        Authorization:"Bearer token123" \            # 请求头
        Content-Type:application/json \              # 请求头
        name=Alice \                                 # 请求体
        age:=30                                     # 请求体

    4. 发送原始 JSON body
    curlie post api.example.com \
        Content-Type:application/json \
        body='{"name": "John", "age": 25}'

    5. 发送表单数据
    curlie -F post api.example.com/upload \
        Content-Type:'multipart/form-data' \        # 请求头
        file@/path/to/file.jpg \                    # 文件上传
        name=John                                   # 表单字段

    6. 发送 URL 编码表单
    curlie -form POST api.example.com \
        Content-Type:'application/x-www-form-urlencoded' \
        name=John \
        age=25

    7. 从文件读取请求体
    curlie post api.example.com \
        Content-Type:application/json \
        @request.json

    8. 复杂的请求头示例
    curlie api.example.com \
        Authorization:"Basic $(echo -n user:pass | base64)" \
        X-Custom-Header:"custom value" \
        Accept:'application/json, text/plain' \
        User-Agent:'Curlie/1.6.9'

    9. 请求体中的特殊字符
    curlie post api.example.com \
        message="Hello, World!" \                   # 空格
        path="/usr/local/bin" \                     # 斜杠
        query="name=John&age=25" \                  # &符号
        json:='{"key":"value"}'                     # JSON

    10. 常见内容类型的完整示例
    JSON 请求
    curlie post api.example.com/json \
        Content-Type:application/json \
        Accept:application/json \
        name=John \
        age:=25 \
        hobbies:='["reading","gaming"]'

    # XML 请求
    curlie post api.example.com/xml \
        Content-Type:application/xml \
        Accept:application/xml \
        body='<?xml version="1.0"?><user><name>John</name></user>'

    # 文件上传
    curlie -F post api.example.com/upload \
        Content-Type:'multipart/form-data' \
        file@document.pdf \
        thumbnail@image.jpg \
        description="My files"

    📝 小结

    Curlie 是一个非常优秀的 HTTP 客户端工具,它:

    • 完美继承了 curl 的强大功能
    • 拥有比 httpie 更好的兼容性
    • 提供了更现代化的用户体验

    无论你是在开发 API、调试接口,还是写自动化脚本,Curlie 都是一个值得尝试的工具。它不仅能提高你的工作效率,还能让你的调试过程变得更加愉悦。

    🔗 相关链接

    • Curlie 官方仓库:github.com/rs/curlie
    • curl 官网:curl.se
    • httpie 官网:httpie.io

    🎉 如果觉得这篇文章对你有帮助,欢迎点赞转发!

    📮 有任何问题都可以在评论区留言交流!



    字节笔记本
    专注于科技领域的分享,AIGC,全栈开发,产品运营
     最新文章