Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作笔记

    • 实用linux命令-nc
    • 实用linux命令-lsof
    • 实用linux命令-ss
    • Bash 备忘清单
    • Ansible 备忘清单
    • linux 文件的权限和属性
    • GPT分区使用 `parted` 扩展分区的操作流程
    • 实用linux命令-sed
    • VSCode快捷键备忘录
    • 实用linux命令-curl
  • K8S

  • Systemd

  • Nginx

  • Supervisord

  • OpenLdap

  • OpenVPN

  • Windows

  • Sshd

  • WebDev

  • Docker

  • Prometheus

  • Rclone

  • Iptables

  • Firewalld

  • Linux笔记
  • 工作笔记
Carry の Blog
2025-06-10

实用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常用选项

  1. 输出保存至文件

    curl -o filename.html https://example.com
    
    1

    说明:

    • -o选项将输出保存到指定文件
    • 文件名由用户自定义
  2. 自动命名保存文件

    curl -O https://example.com/file.zip
    
    1

    说明:

    • -O选项自动使用URL中的文件名保存输出
    • 适合直接下载文件
  3. 显示详细进度信息

    curl -v https://example.com
    
    1

    说明:

    • -v选项显示详细的连接和传输信息
    • 对调试连接问题非常有用
  4. 静默模式

    curl -s https://example.com
    
    1

    说明:

    • -s选项不显示进度信息或错误消息
    • 适合用于脚本中
  5. 跟随重定向

    curl -L https://example.com
    
    1

    说明:

    • -L选项自动跟随HTTP重定向
    • 网站常用302/301重定向到新位置
  6. 设置请求头

    curl -H "Content-Type: application/json" https://api.example.com
    
    1

    说明:

    • -H选项设置HTTP请求头
    • 可以多次使用设置多个头部
  7. 超时设置

    curl --connect-timeout 5 https://example.com
    
    1

    说明:

    • --connect-timeout设置连接超时时间(秒)
    • 防止连接不可达时长时间等待

curl常用请求方法

  1. GET请求(默认)

    curl https://api.example.com
    
    1

    说明:

    • 不指定方法时,默认使用GET请求
    • 用于获取资源
  2. POST请求

    curl -X POST -d "name=value&foo=bar" https://api.example.com
    
    1

    说明:

    • -X POST指定使用POST方法
    • -d后跟要发送的数据
    • 常用于表单提交
  3. PUT请求

    curl -X PUT -d "content" https://api.example.com/resource
    
    1

    说明:

    • 用于更新指定资源
    • 通常用于RESTful API
  4. DELETE请求

    curl -X DELETE https://api.example.com/resource/123
    
    1

    说明:

    • 用于删除指定的资源
    • 常用于API中删除操作
  5. HEAD请求

    curl -I https://example.com
    
    1

    说明:

    • -I发送HEAD请求,只获取HTTP头信息
    • 用于检查资源是否存在或最后修改时间

curl数据传输

  1. 发送表单数据

    curl -d "username=admin&password=secret" https://example.com/login
    
    1

    说明:

    • -d选项发送application/x-www-form-urlencoded格式数据
    • 模拟HTML表单提交
  2. 发送JSON数据

    curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":30}' https://api.example.com/users
    
    1

    说明:

    • 通过设置合适的Content-Type头和格式化的数据
    • 常用于API通信
  3. 上传文件

    curl -F "file=@localfile.jpg" https://example.com/upload
    
    1

    说明:

    • -F选项使用multipart/form-data格式上传文件
    • @符号后面是要上传的本地文件路径
  4. 从文件读取数据发送

    curl -d @data.json -H "Content-Type: application/json" https://api.example.com
    
    1

    说明:

    • 使用@符号从文件读取发送内容
    • 适合大量或格式化数据

curl高级用法

  1. HTTP认证

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

    说明:

    • -u选项提供HTTP基本认证凭据
    • 也支持摘要认证和其他认证方式
  2. 使用Cookie

    curl -b "name=value" https://example.com
    
    1

    说明:

    • -b选项发送Cookie
    • 可以从文件读取Cookie:-b cookie.txt
  3. 保存Cookie

    curl -c cookie.txt https://example.com/login
    
    1

    说明:

    • -c选项保存服务器设置的Cookie
    • 适合模拟会话保持
  4. 使用代理

    curl -x proxy.example.com:8080 https://target.com
    
    1

    说明:

    • -x选项指定HTTP代理
    • 也支持SOCKS代理
  5. 限制传输速率

    curl --limit-rate 200K https://example.com/bigfile
    
    1

    说明:

    • 限制下载速度,避免占用过多带宽
    • 可以指定K(KB/s)或M(MB/s)单位
  6. 继续中断的下载

    curl -C - -O https://example.com/largefile.zip
    
    1

    说明:

    • -C -自动从断点继续下载
    • 有助于恢复中断的大文件下载

实用curl示例

  1. 测试网站响应时间

    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丢弃实际内容
  2. 测试API并格式化JSON响应

    curl -s https://api.example.com | python -m json.tool
    
    1

    说明:

    • 结合Python的json.tool模块格式化输出
    • 也可以使用jq工具:curl -s URL | jq
  3. 下载多个文件

    curl -O https://example.com/file1.txt -O https://example.com/file2.txt
    
    1

    说明:

    • 可以在一个命令中指定多个URL下载
    • 每个URL需要单独的-O选项
  4. 模拟浏览器请求

    curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://example.com
    
    1

    说明:

    • -A选项设置User-Agent头
    • 对于检测浏览器的网站很有用
  5. 验证HTTPS证书

    curl -v https://example.com 2>&1 | grep "SSL certificate"
    
    1

    说明:

    • 验证网站的SSL证书信息
    • 对安全检查很有用
  6. 测试WebSocket连接

    curl -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" https://ws.example.com
    
    1

    说明:

    • 简单测试WebSocket服务器端点
    • -N禁用输出缓冲

curl与其他工具的配合

  1. 与jq结合处理JSON

    curl -s https://api.example.com/users | jq '.users[].name'
    
    1

    说明:

    • 使用jq提取或过滤JSON数据
    • 对API返回数据的处理非常有用
  2. 与grep结合提取信息

    curl -s https://example.com | grep -o '<title>.*</title>'
    
    1

    说明:

    • 提取页面中的特定内容
    • 可以快速检索关键信息
  3. 在脚本中使用

    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注意事项

  1. 安全考虑

    • 在命令行使用密码时需谨慎,可能会记录在shell历史记录中
    • 考虑使用~/.netrc文件或环境变量存储凭据
  2. HTTP/2支持

    • 使用--http2选项启用HTTP/2支持
    • 部分版本的curl默认支持HTTP/2
  3. 重定向处理

    • 默认情况下不跟随重定向,使用-L选项开启
    • 可以用--max-redirs限制最大重定向次数
  4. 证书验证

    • 默认验证HTTPS证书,可用-k选项禁用验证
    • 生产环境应避免禁用证书验证
  5. 请求频率限制

    • 频繁请求可能触发服务器的速率限制或IP封禁
    • 考虑使用--limit-rate和适当的延迟

上次更新: 6/21/2025

← VSCode快捷键备忘录 kubectl常用命令→

最近更新
01
表空间管理与回收
06-21
02
MySQL抖动刷脏页
06-21
03
count函数详解
06-21
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式