Back

每个Web开发者都应该知道的基本curl命令

每个Web开发者都应该知道的基本curl命令

curl新手?从我们的初学者指南开始:使用curl发送HTTP请求

在调试API或测试端点时,你需要快速、可靠且无需复杂设置的工具。虽然像Postman这样的GUI工具有其用武之地,但curl命令为Web开发者提供了无与伦比的速度和灵活性来进行命令行测试。本参考指南涵盖了你日常使用的基本curl命令,从基本的GET请求到高级身份验证模式。

关键要点

  • 首先掌握基本的GET和POST请求——它们涵盖了80%的API测试需求
  • 始终包含适当的Content-Type和Authorization头部
  • 调试连接问题时使用详细模式(-v
  • 在生产环境中设置超时以防止脚本挂起
  • 将响应保存到文件以进行分析和比较
  • 使用-L跟随重定向以获得完整的请求链
  • 将curl与jq等工具结合使用以更好地处理JSON

API测试的基本curl命令

1. 基本GET请求

最简单的curl命令从任何URL获取数据:

curl https://api.github.com/users/octocat

这会返回原始JSON响应。为了更好的可读性,可以通过JSON格式化器传输输出:

# macOS/Linux
curl https://api.github.com/users/octocat | jq

# Windows (需要安装jq)
curl https://api.github.com/users/octocat | jq

使用场景: 快速API端点测试、检查服务是否响应或为脚本获取数据。

2. 带JSON数据的POST请求

现代API期望JSON负载。以下是正确发送它们的方法:

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"name":"John Doe","email":"john@example.com"}' \
  https://api.example.com/users

对于复杂的JSON,将其保存到文件并引用:

curl -X POST \
  -H "Content-Type: application/json" \
  -d @user-data.json \
  https://api.example.com/users

使用场景: 创建资源、提交表单或使用结构化数据测试POST端点。

3. 添加自定义头部

API通常需要特定的头部来进行身份验证、内容协商或自定义参数:

curl -H "Authorization: Bearer your-token-here" \
     -H "Accept: application/json" \
     -H "User-Agent: MyApp/1.0" \
     https://api.example.com/protected-resource

使用场景: API身份验证、设置用户代理、指定响应格式或添加自定义应用程序头部。

4. 跟随重定向

默认情况下,curl在重定向时停止。使用-L自动跟随重定向:

curl -L https://bit.ly/shortened-url

限制重定向跳转以防止无限循环:

curl -L --max-redirs 5 https://example.com

使用场景: 测试短链接、跟随API重定向或检查应用程序中的重定向链。

5. 将响应保存到文件

与其让终端杂乱无章,不如直接将响应保存到文件:

# 使用原始文件名保存
curl -O https://example.com/data.json

# 使用自定义文件名保存
curl -o my-data.json https://api.example.com/export

# 分别保存头部和正文
curl -D headers.txt -o response.json https://api.example.com/data

使用场景: 下载文件、保存API响应以供分析或归档测试结果。

6. 基本身份验证

许多API仍然使用基本身份验证。安全地处理它:

curl -u username:password https://api.example.com/secure-endpoint

为了更好的安全性,让curl提示输入密码:

curl -u username https://api.example.com/secure-endpoint

使用场景: 测试内部API、访问开发端点或使用传统身份验证系统。

7. 用于调试的详细输出

当请求失败或行为异常时,详细模式显示确切发生的情况:

curl -v https://api.example.com/endpoint

这会显示:

  • 发送的请求头部
  • 接收的响应头部
  • SSL/TLS握手详细信息
  • 连接信息

使用场景: 调试失败的请求、理解API行为或排除SSL问题。

8. 设置超时

通过设置连接和总超时来防止请求挂起:

# 10秒连接超时,30秒总超时
curl --connect-timeout 10 --max-time 30 https://slow-api.example.com

使用场景: 测试慢速端点、防止脚本挂起或在不可靠网络中工作。

9. 表单数据提交

对于传统表单提交或文件上传:

# 标准表单数据
curl -X POST -d "username=john&password=secret" https://example.com/login

# 文件上传
curl -F "file=@document.pdf" -F "description=Important doc" https://example.com/upload

使用场景: 测试表单端点、上传文件或处理多部分数据。

10. 包含响应头部

在输出中查看头部和正文:

# 在响应中包含头部
curl -i https://api.example.com/endpoint

# 仅头部(用于检查状态码)
curl -I https://api.example.com/endpoint

使用场景: 检查响应码、调试缓存问题或检查API头部。

Web开发者的高级curl命令

处理Cookie

在请求间维护会话状态:

# 将cookie保存到文件
curl -c cookies.txt https://example.com/login

# 使用保存的cookie
curl -b cookies.txt https://example.com/dashboard

代理配置

通过代理路由请求进行测试或安全:

curl --proxy http://proxy.company.com:8080 https://api.example.com

SSL证书处理

对于使用自签名证书的开发环境:

# 跳过证书验证(仅开发环境)
curl -k https://localhost:8443/api

# 使用自定义CA证书
curl --cacert custom-ca.pem https://secure-api.example.com

性能和自动化技巧

批量操作

高效测试多个端点:

# 在一个命令中使用多个URL
curl https://api1.example.com https://api2.example.com

# 从文件中读取
curl -K url-list.txt

输出格式化

让响应更具可读性:

# 使用jq美化JSON
curl -s https://api.example.com/data | jq '.'

# 提取特定字段
curl -s https://api.example.com/users | jq '.[] | .name'

错误处理

让curl在HTTP错误时静默失败以用于脚本:

curl --fail --silent https://api.example.com/endpoint || echo "Request failed"

curl与其他工具:何时使用什么

使用curl的场景:

  • 快速命令行测试
  • 脚本和自动化
  • CI/CD流水线集成
  • 最小系统资源使用

使用Postman的场景:

  • 复杂请求集合
  • 团队协作
  • 可视化响应检查
  • 高级测试工作流

使用HTTPie的场景:

  • 偏好更可读的语法
  • JSON优先的API测试
  • 更好的默认格式化

常见问题

使用limit-rate选项来限制请求,例如限制为每秒200千字节。你也可以在脚本中使用sleep命令在请求之间添加延迟。

-d标志将数据作为表单编码发送,这是POST请求的默认方式。-F标志将数据作为多部分表单数据发送,这在上传文件时是必需的。

可以。为此,发送一个包含GraphQL查询的JSON负载的POST请求。

使用详细模式检查SSL握手,如果需要可以使用insecure标志临时跳过证书验证,或者使用cacert选项指定自定义证书颁发机构。

对于基于令牌的身份验证,传递带有令牌的Authorization头部。对于基本身份验证,使用用户名和密码选项。为了提高安全性,将敏感值存储在环境变量中并在命令中引用它们。

结论

这些curl命令构成了命令行API测试的基础。从基本的GET和POST请求开始,然后随着需求的增长逐步整合头部、身份验证和高级功能。关键是为最常见的模式建立肌肉记忆——一旦你能够快速从终端测试端点,你会发现自己在开发和调试过程中不断使用curl。

Web开发者的curl命令为高效的API测试和调试提供了基础。这些命令在所有平台上都能工作,并无缝集成到开发工作流中,使它们成为任何Web开发者工具包中的必备工具。

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers