Linux必备下载命令之curl详解

curl是HTTP请求神器。

支持HTTPS协议,安全传输。

不用手动输入,写脚本专用。

代理、认证、续传功能全。

语法:curl -x代理地址 URL。

保存网页:curl -o 文件名 URL。

保存cookie:curl -c cookie.txt URL。

下载大文件:curl -C cookie.txt URL。

失败不报错:curl -f URL。

安静模式:curl -s URL。

模拟浏览器:curl -e 'http://example.com' URL。

用man curl看详细参数。

你自己掂量。

自学shell之curl

说实话,我当年刚接触Linux那会儿,curl对我来说就是个黑盒子。
直到有一次,我需要远程更新服务器上的配置文件,结果发现本地修改后直接scp过去,服务器上居然覆盖了旧配置导致服务挂了。
那一刻我才明白,用curl上传文件多好——可以指定本地文件和远程路径,还能带参数覆盖或追加,这比单纯用scp灵活多了。

有意思的是curl的-O和-o参数用法,这绝对是新手最容易搞混的地方。
记得有次我写脚本自动更新日志文件,明明想用-O让curl直接保存为remote.log,结果用了-o,结果每次更新都覆盖了同名的本地文件。
这个细节现在想起来都觉得好笑,但当时真是折腾了我半天。
对了,这事儿发生在2 01 8 年那个冬天,当时用的是CentOS 7 系统。

处理Cookie这块我没亲自跑过,但根据论坛老哥们的讨论,curl的-b参数简直是神技。
有位兄弟分享过他的案例:在自动化测试Jenkins任务时,先用curl带-b参数带上登录Cookie,之后再用同样的Cookie执行构建命令,整个流程跑得跟本地操作似的。
当时他用的还是老版本的curl,好像是7 .x系列的,后来升级到最新版后,他说参数选项更多了。

伪造Referer这个操作,我倒是用过。
有次需要测试某个反爬虫机制的网站,直接用curl访问会被拦着。
结果我在大学实验室的Wi-Fi环境下,用curl -e "http://example.com"绕了过去。
这事儿发生在2 01 9 年,当时实验室的防火墙还挺严的。
不过说实话,现在很多网站的反爬策略越来越强,单纯伪造Referer可能已经不管用了。

断点续传功能真的救过我几次。
我之前维护过一个监控系统,有一次下载核心压缩包时网络突然断了,用wget死活要重装,结果curl加-C参数直接从断点续传,省了半天事。
那个包有2 GB多,当时下载速度也就1 MB/s左右,要是用wget估计得折腾到半夜。
数据我记得是2 01 7 年左右的事,用的还是curl 7 .2 9 .0那个版本。

上传文件用-T参数我也常用。
比如现在写Python脚本调用远程API,经常会把生成的json文件用curl -T file.json http://api.example.com upload。
这比用scp+cat组合要方便太多了。
不过要注意,curl的上传和下载模式是可切换的,用--upload-file才真正是上传模式,单纯-T其实是POST请求,这点当时我也踩坑过。

curl还能处理HTTPS证书问题,这绝对是它比wget强的地方。
有次在某个旧系统上,服务器自签名证书居然连https://都打不开,结果我加了个--insecure参数,立马就通了。
那会儿大概是2 01 8 年底,用的还是那个公司的私有云环境。
现在想想,用curl处理证书问题简直是手到擒来。

最后要说的是,curl的-e参数我其实用得不多。
主要是现在很多自动化框架都自带处理Referer的逻辑,手动用curl伪造反而显得多余。
但有一次帮朋友调试浏览器插件,他怀疑是Referer问题,我临时用curl -e "http://user-agent.com"测试了一下,还真发现了个小bug。
这事儿是2 02 0年春天的事了。

总之,curl这工具用好了能干的事太多了。
从简单的下载到复杂的接口交互,它都能搞定。
关键是得知道每个参数的边界条件,比如-O和-o的区别、上传模式切换等。
这些细节用多了自然就熟练了,就像我现在写脚本,curl几乎成了肌肉记忆。

linux curl命令详解

curl是命令行工具,用于网络数据传输,支持多种协议。


下载文件:-o指定文件名,-C断点续传。

请求信息:-I显示响应头,-L跟随重定向,-v显示详细信息。

发送请求:-d发送POST数据,-F发送表单数据。

设置请求头:-H设置请求头。

身份验证:--basic基本验证,--digest数字验证。

传输设置:--connect-timeout最大请求时间,--limit-rate传输速度。

SSL:-E客户端证书,-k不验证证书。

安装:Debian/Ubuntu:sudo apt install curl。

提示“command not found”?安装或检查PATH。