Linux系统中curl命令的基本使用
Linux系统中curl命令的基本使用
一、curl命令介绍
1.1 curl命令概述
cURL(Client URL)是一个功能强大的命令行工具和库,支持多种网络协议传输数据。自1997年由Daniel Stenberg创建以来,它已成为开发者和系统管理员日常工作中不可或缺的工具。在Linux系统中,curl凭借其跨平台特性和丰富的功能选项,被广泛应用于API测试、文件传输、网页抓取等场景。
1.2 主要特性
- 支持30+协议(HTTP/HTTPS/FTP/FTPS/SFTP等)
- 支持代理访问和身份验证
- 文件上传/下载功能
- Cookie支持
- SSL/TLS加密
- 断点续传
- 带宽控制
二、安装与验证
2.1 安装curl
大多数现代Linux发行版已预装curl,可通过以下命令验证:
curl --version
若未安装,使用对应包管理器安装:
Debian/Ubuntu
apt-get update && sudo apt-get install curl
RHEL/CentOS
yum install curl
Fedora
dnf install curl
2.2 版本检查
root@jeven01:~# curl --version
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.16
Release-Date: 2022-01-05
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets zst
三、基础使用语法
3.1 基本命令格式
curl [options] [URL...]
3.2 常用参数速查表
参数 | 功能描述 |
---|---|
-o | 指定输出文件名 |
-O | 使用远程文件名保存 |
-L | 跟随重定向 |
-v | 显示详细通信过程 |
-s | 静默模式(不显示进度) |
-H | 添加请求头 |
-d | 发送POST数据 |
-F | 表单提交 |
-u | 用户认证 |
-x | 使用代理服务器 |
-C - | 断点续传 |
四、下载文件
4.1 指定文件名下载
使用
-o
选项,指定文件名下载文件。
curl -o node-v14.17.0-linux-x64.tar.xz https://nodejs.org/dist/v14.17.0/node-v14.17.0-linux-x64.tar.xz
4.2 保持原始文件名
使用
-O
选项,保持默认的文件名进行下载。
curl -O https://nodejs.org/dist/v14.17.0/node-v14.17.0-linux-x64.tar.xz
4.3 指定下载目录
使用
-o
选项,指定下载目录及文件名后再下载文件。
curl -o /tmp/node-v14.17.0-linux-x64.tar.xz https://nodejs.org/dist/v14.17.0/node-v14.17.0-linux-x64.tar.xz
4.4 显示下载过程
-v
参数显示完整的 HTTP 请求和响应头信息,用于调试。
curl -vo /tmp/node-v14.17.0-linux-x64.tar.xz https://nodejs.org/dist/v14.17.0/node-v14.17.0-linux-x64.tar.xz
4.5 静默下载(不显示进度)
-s
参数隐藏进度条和错误信息,适用于脚本自动化。
curl -s -O https://example.com/aa.sh
4.6 断点续传
-C -
参数在下载中断后,从断点继续下载。
curl -C - -O https://example.com/aa.sh
4.7 限速下载
--limit-rate 100K
将下载速度限制为 100KB/s。
curl --limit-rate 100K -O https://example.com/aa.sh
4.8 使用代理下载
-x
参数通过指定代理服务器(如http://proxy-server:8080
)下载文件。
curl -x http://proxy-server:8080 -O https://example.com/aa.sh
4.9 忽略 SSL 证书验证
-k
参数跳过 SSL 证书验证(仅用于测试环境,不安全!)。
curl -k -O https://example.com/aa.sh
4.10 显示下载进度条
-#
参数显示简单的进度条(替代默认的百分比进度)。
curl -# -O https://example.com/aa.sh
五、其余用法
5.1 访问网页内容
直接输出文件内容到终端(适用于查看脚本内容,不保存文件)
curl https://example.com/aa.sh
5.2 仅获取 HTTP 头信息
-I
参数仅显示服务器的响应头(检查状态码、内容类型等)。
执行以下命令,从返回的头部信息来看,服务器返回了HTTP/2 200状态码,表示请求成功,并且显示了包括内容类型、长度、过期时间、缓存控制、服务器类型等在内的多项响应头信息,这些信息揭示了页面内容的一些特性和通过CDN(内容分发网络)进行传输的路径和缓存情况。
curl -I https://example.com/aa.sh
5.3 跟随重定向(自动跳转)
-L选项表示如果服务器返回的是一个重定向响应(如301或302),则curl会自动跟随该重定向到新的URL地址继续请求。
curl -L https://example.com/aa.sh
5.4 发送简单的 POST 请求
-X POST
表示发送 POST 请求,-d
后跟要提交的数据(比如用户名和密码)。这就像你填完网页上的表格点提交按钮。
curl -X POST -d "username=john&password=123456" https://example.com/login
5.5 发送 JSON 数据给 API
-H
添加请求头,这里告诉服务器发送的是 JSON 格式的数据。-d
后是 JSON 内容(比如用户信息)。常用于和手机 App 或网站后端交互。
curl -X POST \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "age": 25}' \
https://api.example.com/users
5.6 上传文件
-F
用于上传文件,@
符号后跟本地文件路径(比如上传照片到网盘)。类似网页中点击“选择文件”然后上传。
curl -X POST -F "file=@/home/user/photo.jpg" https://upload.example.com
六、注意事项
- 覆盖风险:使用
-O
或-o
保存文件时,若本地已有同名文件,会直接覆盖且无提示,建议先检查文件是否存在。 - 敏感信息泄露:直接在命令中写密码(如
-u user:pass
)会被终端历史记录保存,建议改用交互式输入或环境变量。 - SSL 安全:生产环境中避免使用
-k/--insecure
跳过证书验证,可能遭遇中间人攻击。 - 请求方法明确:默认是 GET 请求,发 POST 请求时需显式指定
-X POST
并搭配-d
或-F
传数据。 - 静默模式陷阱:脚本中使用
-s
静默模式时,务必检查返回值($?
)或添加错误处理逻辑。 - 断点续传限制:
-C -
续传功能需服务器支持,否则会重新下载整个文件。 - 编码问题:提交含空格或中文的数据时,使用
--data-urlencode
自动编码(如curl -G --data-urlencode "q=搜索词" URL
)。 - 代理设置:使用
-x
参数设置代理时,需确保代理协议(HTTP/Socks5)与目标协议匹配。 - 调试建议:遇到问题时先用
-v
查看完整通信过程,或-I
仅检查响应头。
注:由于平台审核原因,文中将测试链接都设置为示例链接,实际请替换真实地址。
- 点赞
- 收藏
- 关注作者
评论(0)