Linux系统中curl命令的基本使用

举报
江湖有缘 发表于 2025/03/31 22:45:48 2025/03/31
【摘要】 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

六、注意事项

  1. 覆盖风险:使用 -O  -o 保存文件时,若本地已有同名文件,会直接覆盖且无提示,建议先检查文件是否存在。
  2. 敏感信息泄露:直接在命令中写密码(如 -u user:pass)会被终端历史记录保存,建议改用交互式输入或环境变量。
  3. SSL 安全:生产环境中避免使用 -k/--insecure 跳过证书验证,可能遭遇中间人攻击。
  4. 请求方法明确:默认是 GET 请求,发 POST 请求时需显式指定 -X POST 并搭配 -d  -F 传数据。
  5. 静默模式陷阱:脚本中使用 -s 静默模式时,务必检查返回值($?)或添加错误处理逻辑。
  6. 断点续传限制-C - 续传功能需服务器支持,否则会重新下载整个文件。
  7. 编码问题:提交含空格或中文的数据时,使用 --data-urlencode 自动编码(如 curl -G --data-urlencode "q=搜索词" URL)。
  8. 代理设置:使用 -x 参数设置代理时,需确保代理协议(HTTP/Socks5)与目标协议匹配。
  9. 调试建议:遇到问题时先用 -v 查看完整通信过程,或 -I 仅检查响应头。

注:由于平台审核原因,文中将测试链接都设置为示例链接,实际请替换真实地址。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。