12k
All articles

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

介绍命令行API测试中常用的curl命令,涵盖GET、POST、请求头、身份验证、超时及调试等核心用法,帮助提升Web开发效率。

OpenReplay Team
OpenReplay Team
每个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测试
  • 更好的默认格式化

常见问题

如何使用curl命令处理API速率限制?

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

curl中-d和-F标志的区别是什么?

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

我可以使用curl测试GraphQL API吗?

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

如何使用curl调试SSL证书问题?

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

使用curl测试已认证API的最佳方式是什么?

对于基于令牌的身份验证,传递带有令牌的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

We use cookies to improve your experience. By using our site, you accept cookies.