curl命令终极指南:从入门到封神,一篇文章让你成为网络请求大师
curl简介:curl(Client URL)是一个强大的命令行工具,用于通过URL传输数据。它支持多种协议,包括HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、LDAP、DICT、TELNET等。curl设计初衷是无需用户交互即可工作,非常适合脚本和自动化任务。几乎可以处理所有与URL数据传输相关的任务。通过组合不同的选项,可以构建出适合各种场景的请求。在生产环境中使用时,掌握curl可以大大提高在Linux环境下与网络服务交互的效率,特别是在自动化脚本和系统管理中。
主要特点:支持多种协议、支持代理服务器、用户认证、文件上传/下载、 断点续传、支持SSL/TLS、Cookie支持、支持HTTP POST/PUT等请求方法。
基本用法
1.最简单的请求
1
| curl https://www.example.com
|
向指定的URL发送GET请求并将响应输出到终端,如果提示未安装,则先安装:


2. 保存输出到文件
1
| curl -o output.html https://www.example.com
|
-o选项指定输出文件名。也可以使用-O(大写O)来使用远程文件的名称保存:
1
| curl -O https://www.example.com/index.html
|
3. HTTP请求方法,可以参考前面的文章:Elasticsearch(简称ES)简单入门,里面有具体的应用实例。
1
| GET请求curl https://api.example.com/users
|
1
| #POST请求#使用`-X POST`指定POST方法,`-d`发送数据:curl -X POST -d "name=John&age=30" https://api.example.com/users
|
1
| #PUT请求curl -X PUT -d "name=John&age=31" https://api.example.com/users/1
|
1
| #DELETE请求curl -X DELETE https://api.example.com/users/1
|
1
| #HEAD请求,只获取响应头:curl -I https://www.example.com
|
1
| #请求头和内容类型,设置请求头,使用`-H`选项:curl -H "Authorization: Bearer token123" -H "Content-Type: application/json" https://api.example.com/data
|
1
| #查看响应头,`-i`选项会在输出中包含响应头。curl -i https://www.example.com
|
1
| 发送表单数据,`-F`用于multipart/form-data类型的表单提交。curl -X POST -F "name=John" -F "age=30" -F "photo=@photo.jpg" https://api.example.com/profile
|
1
| #发送JSON数据curl -X POST -H "Content-Type: application/json" -d '{"username":"john","password":"secret"}' https://api.example.com/login
|
1 2
| URL编码数据curl --data-urlencode "name=John Doe" https://api.example.com/users 4、认证和安全性
|
1
| #基本认证curl -u username:password https://api.example.com#忽略SSL证书验证(生产环境慎用)curl -k https://example.com#指定客户端证书curl --cert client.pem --key key.pem https://secure.example.com
|
5、Cookie管理
1
| #发送Cookiecurl -b "name=value" https://www.example.com#保存收到的Cookie到文件curl -c cookies.txt https://www.example.com#从文件读取并发送Cookiecurl -b cookies.txt https://www.example.com
|
代理设置
1
| #使用HTTP代理curl -x http://proxy.example.com:8080 https://www.target.com#使用SOCKS代理curl --socks5 hostname:port https://www.example.com
|
6、高级功能:
1
| #限制传输速度,如限制下载速度为1MB/s:curl --limit-rate 1M -O https://example.com/largefile.zip
|
1
| #断点续传curl -C - -O https://example.com/largefile.zip
|
1
| #跟随重定向,不理解这是做作用哈,希望懂的大佬留言指导。curl -L https://example.com
|
1
| #显示详细输出,`-v`选项会显示详细的请求和响应信息。curl -v https://www.example.com
|
1
| #只显示错误信息,`-s`静默模式,`-S`显示错误,这个在写自动化脚本时非常有用。curl -s -S https://www.example.com
|
1
| #测量请求时间curl -w "%{time_total}\n" -o /dev/null -s https://www.example.com
|
7、 FTP操作
1
| #下载FTP文件curl -u username:password -O ftp://ftp.example.com/file.zip#上传文件到FTPcurl -u username:password -T localfile.txt ftp://ftp.example.com/#列出FTP目录内容curl -u username:password ftp://ftp.example.com/
|
8、 输出格式化
1
| #自定义输出格式curl -w "时间: %{time_total}秒\n大小: %{size_download}字节\n" -o /dev/null -s https://www.example.com#可用变量: `%{http_code}` - 响应状态码;`%{time_total}` - 总请求时间`%{size_download}` - 下载字节数;`%{speed_download}` - 平均下载速度;`%{url_effective}` - 最终URL(考虑重定向)。
|
9、实用示例
1 2 3 4
| #检查网站是否可用curl -s -o /dev/null -w "%{http_code}" https://www.example.com #下载多个文件curl -O https://example.com/file1.txt -O https://example.com/file2.txt #测试API响应时间curl -X POST -H "Content-Type: application/json" -d '{"query":"test"}' -w "\n响应时间: %{time_total}秒\n" https://api.example.com/query #模拟浏览器请求,这个功能,懂的都懂哈。curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" https://www.example.com
|
https://mp.weixin.qq.com/s/oZJKZzhFlngizPLLRAY5ng?scene=1