实用linux命令-curl原创
curl命令简介
curl
是一个强大的命令行工具,用于进行数据传输。它支持多种协议,包括HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、LDAP、SMB等。curl在网络测试、API调用、文件下载、网站测试等场景中非常实用。它的名称源于"Client for URLs",意为URL客户端。
curl基本语法
curl [选项] [URL]
1
说明:
选项
控制curl的行为URL
是要访问的网址或资源
curl常用选项
输出保存至文件
curl -o filename.html https://example.com
1说明:
-o
选项将输出保存到指定文件- 文件名由用户自定义
自动命名保存文件
curl -O https://example.com/file.zip
1说明:
-O
选项自动使用URL中的文件名保存输出- 适合直接下载文件
显示详细进度信息
curl -v https://example.com
1说明:
-v
选项显示详细的连接和传输信息- 对调试连接问题非常有用
静默模式
curl -s https://example.com
1说明:
-s
选项不显示进度信息或错误消息- 适合用于脚本中
跟随重定向
curl -L https://example.com
1说明:
-L
选项自动跟随HTTP重定向- 网站常用302/301重定向到新位置
设置请求头
curl -H "Content-Type: application/json" https://api.example.com
1说明:
-H
选项设置HTTP请求头- 可以多次使用设置多个头部
超时设置
curl --connect-timeout 5 https://example.com
1说明:
--connect-timeout
设置连接超时时间(秒)- 防止连接不可达时长时间等待
curl常用请求方法
GET请求(默认)
curl https://api.example.com
1说明:
- 不指定方法时,默认使用GET请求
- 用于获取资源
POST请求
curl -X POST -d "name=value&foo=bar" https://api.example.com
1说明:
-X POST
指定使用POST方法-d
后跟要发送的数据- 常用于表单提交
PUT请求
curl -X PUT -d "content" https://api.example.com/resource
1说明:
- 用于更新指定资源
- 通常用于RESTful API
DELETE请求
curl -X DELETE https://api.example.com/resource/123
1说明:
- 用于删除指定的资源
- 常用于API中删除操作
HEAD请求
curl -I https://example.com
1说明:
-I
发送HEAD请求,只获取HTTP头信息- 用于检查资源是否存在或最后修改时间
curl数据传输
发送表单数据
curl -d "username=admin&password=secret" https://example.com/login
1说明:
-d
选项发送application/x-www-form-urlencoded格式数据- 模拟HTML表单提交
发送JSON数据
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":30}' https://api.example.com/users
1说明:
- 通过设置合适的Content-Type头和格式化的数据
- 常用于API通信
上传文件
curl -F "file=@localfile.jpg" https://example.com/upload
1说明:
-F
选项使用multipart/form-data格式上传文件@
符号后面是要上传的本地文件路径
从文件读取数据发送
curl -d @data.json -H "Content-Type: application/json" https://api.example.com
1说明:
- 使用
@
符号从文件读取发送内容 - 适合大量或格式化数据
- 使用
curl高级用法
HTTP认证
curl -u username:password https://example.com/secure
1说明:
-u
选项提供HTTP基本认证凭据- 也支持摘要认证和其他认证方式
使用Cookie
curl -b "name=value" https://example.com
1说明:
-b
选项发送Cookie- 可以从文件读取Cookie:
-b cookie.txt
保存Cookie
curl -c cookie.txt https://example.com/login
1说明:
-c
选项保存服务器设置的Cookie- 适合模拟会话保持
使用代理
curl -x proxy.example.com:8080 https://target.com
1说明:
-x
选项指定HTTP代理- 也支持SOCKS代理
限制传输速率
curl --limit-rate 200K https://example.com/bigfile
1说明:
- 限制下载速度,避免占用过多带宽
- 可以指定K(KB/s)或M(MB/s)单位
继续中断的下载
curl -C - -O https://example.com/largefile.zip
1说明:
-C -
自动从断点继续下载- 有助于恢复中断的大文件下载
实用curl示例
测试网站响应时间
curl -s -w "DNS解析时间: %{time_namelookup}s\n连接时间: %{time_connect}s\n总时间: %{time_total}s\n" -o /dev/null https://example.com
1说明:
-w
选项可以输出格式化的统计信息-o /dev/null
丢弃实际内容
测试API并格式化JSON响应
curl -s https://api.example.com | python -m json.tool
1说明:
- 结合Python的json.tool模块格式化输出
- 也可以使用jq工具:
curl -s URL | jq
下载多个文件
curl -O https://example.com/file1.txt -O https://example.com/file2.txt
1说明:
- 可以在一个命令中指定多个URL下载
- 每个URL需要单独的-O选项
模拟浏览器请求
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://example.com
1说明:
-A
选项设置User-Agent头- 对于检测浏览器的网站很有用
验证HTTPS证书
curl -v https://example.com 2>&1 | grep "SSL certificate"
1说明:
- 验证网站的SSL证书信息
- 对安全检查很有用
测试WebSocket连接
curl -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" https://ws.example.com
1说明:
- 简单测试WebSocket服务器端点
-N
禁用输出缓冲
curl与其他工具的配合
与jq结合处理JSON
curl -s https://api.example.com/users | jq '.users[].name'
1说明:
- 使用jq提取或过滤JSON数据
- 对API返回数据的处理非常有用
与grep结合提取信息
curl -s https://example.com | grep -o '<title>.*</title>'
1说明:
- 提取页面中的特定内容
- 可以快速检索关键信息
在脚本中使用
response=$(curl -s -w "%{http_code}" -o /tmp/output.txt https://api.example.com) if [ "$response" -eq 200 ]; then echo "请求成功" else echo "请求失败,状态码: $response" fi
1
2
3
4
5
6说明:
- 在shell脚本中捕获HTTP状态码
- 基于状态码执行不同操作
curl注意事项
安全考虑
- 在命令行使用密码时需谨慎,可能会记录在shell历史记录中
- 考虑使用
~/.netrc
文件或环境变量存储凭据
HTTP/2支持
- 使用
--http2
选项启用HTTP/2支持 - 部分版本的curl默认支持HTTP/2
- 使用
重定向处理
- 默认情况下不跟随重定向,使用
-L
选项开启 - 可以用
--max-redirs
限制最大重定向次数
- 默认情况下不跟随重定向,使用
证书验证
- 默认验证HTTPS证书,可用
-k
选项禁用验证 - 生产环境应避免禁用证书验证
- 默认验证HTTPS证书,可用
请求频率限制
- 频繁请求可能触发服务器的速率限制或IP封禁
- 考虑使用
--limit-rate
和适当的延迟
上次更新: 6/21/2025