curl 详细介绍

curl 详细介绍

文章目录

  • [curl 详细介绍](#curl 详细介绍)
    • [1. 什么是 curl?](#1. 什么是 curl?)
    • [2. 支持的协议](#2. 支持的协议)
    • [3. 主要功能特性](#3. 主要功能特性)
    • [4. 常见用法示例](#4. 常见用法示例)
      • [4.1 下载文件](#4.1 下载文件)
      • [4.2 发送 HTTP 请求](#4.2 发送 HTTP 请求)
      • [4.3 查看响应头](#4.3 查看响应头)
      • [4.4 跟随重定向](#4.4 跟随重定向)
      • [4.5 使用代理](#4.5 使用代理)
      • [4.6 携带 Cookie](#4.6 携带 Cookie)
      • [4.7 携带 HTTP 基本认证](#4.7 携带 HTTP 基本认证)
      • [4.8 限制速度](#4.8 限制速度)
      • [4.9 详细输出(调试)](#4.9 详细输出(调试))
    • [5. libcurl 简介](#5. libcurl 简介)
    • [6. 历史与发展](#6. 历史与发展)
    • [7. 安装方法](#7. 安装方法)
    • [8. 常用选项汇总](#8. 常用选项汇总)
    • [9. 总结](#9. 总结)

1. 什么是 curl?

curl 是一个利用 URL 语法在命令行下工作的文件传输工具,1997 年首次发布。它支持众多网络协议,常被用来测试网络接口、下载文件、上传数据等。curl 名称的意思是"Client URL"(客户端 URL 工具),它的核心功能是通过网络发送请求并接收响应。

除了命令行工具,curl 还提供了一个可移植的库 libcurl,开发者可以在自己的程序中直接使用,实现数据传输功能。

2. 支持的协议

curl 支持以下主要协议(以及其安全版本):

  • DICT -- 字典协议
  • FILE -- 文件访问
  • FTP / FTPS -- 文件传输协议及 SSL/TLS 版本
  • GOPHER -- Gopher 协议
  • HTTP / HTTPS -- 超文本传输协议及加密版本
  • IMAP / IMAPS -- 互联网消息访问协议
  • LDAP / LDAPS -- 轻量级目录访问协议
  • MQTT -- MQTT 消息协议
  • POP3 / POP3S -- 邮局协议
  • RTMP -- 实时消息传输协议
  • RTSP -- 实时流协议
  • SCP -- 安全复制协议
  • SFTP -- SSH 文件传输协议
  • SMB / SMBS -- 服务器消息块协议
  • SMTP / SMTPS -- 简单邮件传输协议
  • TELNET -- 远程登录协议
  • TFTP -- 简单文件传输协议

3. 主要功能特性

  • 多协议支持 -- 涵盖常见网络协议,满足各种传输需求。
  • 断点续传 -- 通过 -C - 选项实现下载或上传的中断恢复。
  • 代理支持 -- 支持 HTTP、HTTPS、SOCKS4、SOCKS5 等多种代理方式。
  • 用户认证 -- 支持 Basic、Digest、NTLM、Kerberos 等多种认证方式。
  • Cookie 管理 -- 可发送和存储 Cookie,模拟浏览器会话。
  • SSL/TLS 证书验证 -- 支持 HTTPS 连接,并可选验证或忽略证书。
  • 自定义请求头 -- 通过 -H 添加或修改 HTTP 头部。
  • 文件上传/下载 -- 支持 FTP 上传、HTTP POST 表单、文件上传等多种方式。
  • 限速与进度显示 -- 可限制传输速度,并显示实时进度条。
  • 脚本友好 -- 命令行输出可被其他程序解析,易于集成到自动化任务中。
  • 跨平台 -- 可在 Linux、macOS、Windows 及多种嵌入式系统上运行。

4. 常见用法示例

4.1 下载文件

  • 保存为原文件名:curl -O https://example.com/file.zip
  • 另存为指定文件名:curl -o myfile.zip https://example.com/file.zip
  • 断点续传:curl -C - -O https://example.com/file.zip

4.2 发送 HTTP 请求

  • GET 请求:curl https://api.example.com/users
  • POST 请求(表单数据):curl -X POST -d "name=John&age=30" https://api.example.com/users
  • POST JSON 数据:curl -X POST -H "Content-Type: application/json" -d '{"name":"John"}' https://api.example.com/users

4.3 查看响应头

  • 仅显示响应头:curl -I https://example.com
  • 同时显示头和正文:curl -i https://example.com

4.4 跟随重定向

curl -L http://example.com 自动跟随 3xx 重定向

4.5 使用代理

curl -x http://proxy.example.com:8080 https://example.com

  • 发送 Cookie:curl -b "session=abc123" https://example.com
  • 保存 Cookie 到文件:curl -c cookies.txt https://example.com
  • 从文件读取 Cookie:curl -b cookies.txt https://example.com

4.7 携带 HTTP 基本认证

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

4.8 限制速度

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

4.9 详细输出(调试)

curl -v https://example.com 显示请求和响应的详细信息

5. libcurl 简介

libcurl 是一个跨平台的网络协议传输库,提供了易于使用的 API。开发者可以在 C、C++、Python、PHP、Ruby 等多种语言中调用它,实现下载、上传、网络通信等功能。libcurl 广泛用于应用程序中,如数据库客户端、下载工具、爬虫等。

6. 历史与发展

  • 1997年 :Daniel Stenberg 开始开发 curl,最初仅支持 HTTP 协议,名为 httpget
  • 1998年:改名为 curl,并开始支持 FTP。
  • 2000年:curl 7.1 发布,引入 libcurl。
  • 此后 curl 不断扩展协议支持,优化性能,现已成为大多数操作系统默认安装的命令行工具之一。
  • 项目始终开源,遵循 MIT 或类似宽松许可证。

7. 安装方法

Linux(常见发行版)

  • Debian/Ubuntu:sudo apt install curl
  • Red Hat/CentOS:sudo yum install curlsudo dnf install curl
  • Arch Linux:sudo pacman -S curl

macOS

  • 使用 Homebrew:brew install curl
  • 系统可能已预装旧版 curl,可使用 Homebrew 安装更新版。

Windows

  • 下载二进制包:https://curl.se/windows/
  • 使用包管理器:choco install curl(Chocolatey)或 winget install curl.cURL

8. 常用选项汇总

选项 说明
-O 使用 URL 中的文件名保存
-o <file> 将输出写入指定文件
-L 跟随重定向
-I 仅获取响应头
-i 包含响应头输出
-X <method> 指定请求方法(GET、POST 等)
-d <data> 发送 POST 数据
-H <header> 添加自定义请求头
-u <user:pass> 提供认证凭据
-b <data或文件> 发送 Cookie
-c <文件> 将服务器返回的 Cookie 保存到文件
-x <proxy> 使用代理
-C - 断点续传
-v 详细输出
--limit-rate <速度> 限制传输速度
--compressed 请求压缩响应(如 gzip)
--ssl-reqd 要求使用 SSL/TLS(如 FTP)

9. 总结

curl 是一个功能强大、灵活且广泛使用的命令行工具,几乎涵盖了所有常见的网络传输场景。无论是快速测试 API、下载文件,还是编写复杂的网络自动化脚本,curl 都能胜任。它的跨平台特性和丰富的选项使得它成为开发者和系统管理员必备的工具之一。

相关推荐
HLC++9 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室11 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy13 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕14 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫15 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生15 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1117 小时前
linux基础IO
linux·运维·服务器
BelongPanda18 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯19 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_7779983419 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器