curl,命令行或脚本中与URL进行交互的工具

简介

curl 是一个用于从命令行或脚本中与 URL 进行交互的工具。它支持多种协议,包括 HTTP、HTTPS、FTP、SFTP 等,广泛用于数据传输和网络请求。

安装

在大多数 Linux 发行版中,curl 通常预装。你可以通过以下命令检查是否已安装:

1
curl --version

如果未安装,可以使用包管理器进行安装:

  • Debian/Ubuntu:

    1
    
    sudo apt-get install curl
    
  • CentOS/RHEL:

    1
    
    sudo yum install curl
    
  • macOS:

    1
    
    brew install curl
    

基本用法

最简单的用法是直接跟上 URL,curl 会默认使用 GET 方法请求该 URL,并将其响应内容(通常是 HTML 或 JSON)打印到标准输出(你的终端屏幕上)。

1
2
# 请求一个网页并显示其 HTML 内容
curl https://www.example.com

常见参数(按功能分类)

输出控制 (Output Control)

默认情况下,curl 将所有内容输出到屏幕。以下参数可以控制输出行为。

  • -o, --output <file>
    • 功能:将输出保存到指定的文件,而不是屏幕。
    • 示例curl -o page.html https://www.example.com
  • -O, --remote-name
    • 功能:将输出保存到文件,并以 URL 中指定的文件名来命名。
    • 示例curl -O https://curl.se/download/curl-7.85.0.tar.gz (会保存为 curl-7.85.0.tar.gz 文件)
  • -s, --silent
    • 功能:静默模式。不显示进度表或错误信息。非常适合在脚本中使用。
    • 示例cron_job_result=$(curl -s https://api.example.com/status)
  • -i, --include
    • 功能:在输出中包含 HTTP 响应头(Response Headers)。这对于调试非常有用。
    • 示例curl -i https://www.example.com
  • -v, --verbose
    • 功能:显示详细的通信过程,包括请求头、响应头和连接信息。是终极调试利器。
    • 示例curl -v https://api.example.com/data

HTTP 请求方法 (HTTP Method)

  • -X, --request <METHOD>
    • 功能:指定要使用的 HTTP 请求方法,如 GET, POST, PUT, DELETE 等。默认是 GET
    • 示例
      • curl -X POST https://api.example.com/users
      • curl -X DELETE https://api.example.com/users/123

发送数据 (Sending Data)

常用于 POSTPUT 请求。

  • -d, --data <data>
    • 功能:发送 HTTP POST 请求的数据。Content-Type 默认为 application/x-www-form-urlencoded
    • 示例 (发送表单数据)curl -X POST -d "name=John&age=30" https://api.example.com/register
    • 示例 (发送 JSON 数据):需要配合 -H 指定 Content-Typecurl -X POST -d '{"name":"John", "age":30}' -H "Content-Type: application/json" https://api.example.com/users
    • 从文件读取数据curl -d @data.json -H "Content-Type: application/json" https://api.example.com/users (注意 @ 符号)
  • -F, --form <name=content>
    • 功能:发送 multipart/form-data 类型的数据,常用于文件上传。
    • 示例 (上传文件)curl -X POST -F "file=@/path/to/your/image.jpg" -F "username=dave" https://api.example.com/upload

自定义请求头 (Custom Headers)

  • -H, --header <header>
    • 功能:添加自定义的 HTTP 请求头。可以多次使用以添加多个头。
    • 示例
      • 设置内容类型curl -H "Content-Type: application/json" ...
      • 设置认证 Tokencurl -H "Authorization: Bearer your_jwt_token" https://api.example.com/secure-data
      • 模拟浏览器curl -H "User-Agent: Mozilla/5.0" https://www.example.com

安全与认证 (Security & Authentication)

  • -u, --user <user:password>
    • 功能:设置 HTTP Basic Authentication 的用户名和密码。
    • 示例curl -u admin:123456 https://api.example.com/admin
  • -k, --insecure
    • 功能:允许 curl 连接到没有有效 SSL/TLS 证书的 HTTPS 站点(例如,使用自签名证书的开发环境)。警告:请勿在生产环境中使用此选项!
    • 示例curl -k https://localhost:8443
  • -L, --location
    • 功能:自动跟踪 HTTP 重定向(响应状态码为 3xx)。很多网站会使用重定向,所以这是一个非常实用的参数。
    • 示例curl -L http://google.com (http 会重定向到 https)

连接控制 (Connection Control)

  • --connect-timeout <seconds>
    • 功能:设置建立连接的最大等待时间(秒)。
    • 示例curl --connect-timeout 5 https://api.example.com
  • -m, --max-time <seconds>
    • 功能:设置整个操作(连接、数据传输等)允许花费的最长时间。
    • 示例curl -m 10 https://api.example.com
  • -x, --proxy <[protocol://]host[:port]>
    • 功能:通过指定的代理服务器发送请求。
    • 示例curl -x http://proxyserver:8080 https://www.example.com

常用参数速查表

短参数 长参数 功能说明
-X --request 指定 HTTP 请求方法 (GET, POST, PUT, DELETE)
-H --header 添加自定义请求头 (例如 Content-Type, Authorization)
-d --data 发送 application/x-www-form-urlencoded 格式的数据
-F --form 发送 multipart/form-data 数据,常用于文件上传
-i --include 在输出中包含响应头
-v --verbose 显示详细的通信过程,用于调试
-o --output 将输出保存到指定文件
-O --remote-name 以远程文件名保存输出
-s --silent 静默模式,不显示进度和错误
-L --location 自动跟随 HTTP 重定向
-u --user 设置 HTTP 基本认证的用户名和密码
-k --insecure 忽略 SSL 证书验证 (慎用!)
页面浏览量Loading
网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计
-->