当前位置: 首页 > 科技观察

还在用邮递员?教你使用curl提高工作效率

时间:2023-03-19 10:07:19 科技观察

curl是Linux系统上的一个网络工具,它的首字母c代表client,表示它是一个客户端程序。通过URL方法,可以在客户端和服务器之间传输数据。它非常强大,支持大多数常见的网络协议:HTTP、HTTPS、FTP。功能也很丰富,支持http、https、cookie、认证、代理、限速、断点续传,提供了非常多的选项。如果熟练使用,基本可以替代postman等图形化工具。与liburl的关系实际上,curl项目包括两个部分:curl和libcurl。关系大致如图所示:curl是命令行工具,底层调用libcurl库。libcurl以库的形式存在,提供各种函数式C接口供其他程序调用,包括curl命令。安装和使用与wget不同。并非所有Linux发行版都安装了curl。可以使用包管理器自己安装:#ubuntuordebian$aptinstallcurl#centosorredhat$yuminstallcurl如果需要使用最新版本,或者自定义安装,可以从源码编译安装通过:$wgethttps://curl.se/download/curl-7.79.1.tar.gz$./configure$make$makeinstall通过curl--version可以验证命令是否安装正确。开始之前,让我们先看看最简单的使用curl的方法,不带任何选项,将服务器响应的内容输出到屏幕上。$curlhttp://linuxblogs.cn有时候我们不想显示错误和进度信息,可以使用-s选项开启静默模式。$curl-shttp://linuxblogs.cn#完全没有输出,可以用"echo$?"判断命令成功与否$curl-s-o/dev/nullhttp://linuxblogs.cn-v选项可以很详细地显示curl的整个工作过程,相当于开启了调试模式。请求http然后介绍http数据传输相关最常用的操作。1、发送GET请求curl命令默认发送GET请求,响应内容直接打印在屏幕上。$curlhttp://www.baidu.comv使用-i选项打印服务器响应的HTTP头信息。#先打印请求头,空行,然后打印网页内容$curl-ihttp://www.baidu.com如果只想测试链接或资源是否正常,使用-I选项只打印响应头信息,注意这里是发送HEAD请求。2、发送POST请求curl默认发送GET请求,使用-X参数指定发送POST请求,使用-d参数指定请求数据。#没有数据的POST请求$curl-xPOSThttp://www.domain.com#发送表单数据$curl-d'user=foo&pass=123'-XPOSThttp://google.com/login#等价于上面的命令$curl-d'user=foo'-d'pass=123'http://google.com/login使用-d选项后,默认为POST请求,-X选项可以省略。另外,使用多个-d选项,可以让命令行显得更清晰。以下命令可以读取本地文件并将其作为数据发送到服务器。$curl-d'@data.txt'http://google.com/login3.发送Json格式的数据请求curl可以发送json格式的请求,需要设置Content-Type为application/json。$curl-d'{"user":"foo","pass":"123"}'\-H'Content-Type:application/json'\http://google.com/login-H选项指定内容-Type请求头是json格式,让web服务器知道数据类型,知道如何处理。4.构造查询字符串参数通过-G选项,可以构造查询字符串参数。curl-G-d'q=chopin'-d'count=20'http://google.com/search#相当于下面的命令curl'http://google.com/search?q=chopin&count=20'上面的命令将发送一个GET请求,或者如果省略了-G选项,则发送一个POST请求。5、添加请求头使用-H选项,可以给请求添加一个头。$curl-H'Accept-Language:en-US'http://google.com#可以指定多个-H选项$curl-H'Accept-Language:en-US'-H'Secret-Message:xyzzy'http://google.com6.设置重定向默认curl不会跟随重定向,指定-L选项会让请求跟随服务器重定向。$curl-Lhttp://api.twitter.com/hello7。设置静默输出指定-s选项将不会输出错误和进度信息。如果您希望curl不产生任何输出,请使用以下命令。$curl-s-o/dev/nullhttp://google.com8。详细调试信息指定-v选项输出通信的全过程,一般用于调试。$curl-vhttp://www.baidu.com--trace选项也可以用来调试,可以输出更详细的内容,比如原始二进制数据。$curl--trace-http://www.baidu.com9.模拟浏览器访问-A选项可以指定客户端的用户代理信息,即设置UserAgent请求头。$curl-A'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/76.0.3809.100Safari/537.36'http://google.com上面的命令将UserAgent设置为Chrome浏览器鉴别。其实也可以直接通过-H选项指定。$curl-H"User-Agent:go/1.15"http://google.com10.Forgerefer解决防盗链有时候在引用或下载网站图片等资源时,会有防盗链限制,可以设置refer请求头由站点域名解析。#-e参数设置HTTP请求头Referer$curl-e'http://linuxblogs.cn'http://linuxblogs.cn/girl.jpg#-H参数也可以直接设置请求头Referer$curl-H》Referer:http://linuxblogs.cn》http://linuxblogs.cn/girl.jpg11.设置Cookie-b选项,向服务器发送Cookie,该命令会生成一个请求头Cookie:foo=bar,向服务器发送一个cookie。$curl-b'foo=bar'http://google.com#发送两个cookie$curl-b'foo=bar;name=mike'http://google.com也可以读取本地cookie文件,发送到服务器。-c选项可以将服务器响应的cookie写入文件。$curl-bcookie.txthttp://google.com#将cookie写入文件$curl-ccookie.txthttp://baidu.com文件操作1.下载文件资源使用-o或-O选项保存文件的网络资源。#相当于wget$curl-ochopin.htmlhttp://linuxblogs.cn#-O选项,可以用url最后一部分作为文件名$curl-Ohttp://linuxblogs.cn/bar.html如果你想要显示下载进度,可以使用-#选项。2、文件的循环下载有时需要下载的多个文件只是名称后缀不同,可以采用这种方式下载。$curl-Ohttp://linuxblogs.cn/dog[1-5].jpg3.压缩下载使用--compressed选项,它允许您请求HTTP和HTTPS服务器提供数据的压缩版本,这在带宽有限时很好,可以为您节省大量时间。curl--compressedhttp://linuxblogs.cn/foo.txt4。限制下载速度如果带宽不够,多人共享带宽,curl支持限速功能。$curlhttp://linuxblogs.cn--limit-rate200K的另一个用法是模拟测试网速慢的场景进行开发测试。5.分片下载有时候文件会很大,我们可以分片下载,最后合并成一个完整的文件。$curl-r0-100-opart1.mp4http://linuxblogs.cn/cang.mp4$curl-r100-200-opart2.mp4http://linuxblogs.cn/cang.mp4$curl-r200--opart3.mp4http://linuxblogs.cn/cang.mp4$catpart*.mp4>cang.mp46.有时候网络不好断点续传。通过curl下载大文件时,可能会出现中断。使用-C选项断点续传,非常有用。$curl-C-Ohttp://linuxblogs.cn/girl.mp4在弱网环境下,增加--retryN选项,失败时可以多次重试,对下载操作更友好。7、通过FTP下载文件支持下载FTP文件,curl提供了两种下载语法。$curl-O-uuser:passftp://linuxblogs.cn/dog.jpg$curl-Oftp://user:pass@linuxblogs.cn/dog.jpg8.上传文件正常开发时,可以通过curl上传文件功能,非常高效。#该命令将向HTTP添加请求标头。Content-Type:multipart/form-datas$curl-F'file=@杨老师.mp4'http://linuxblogs.cn/upload-F选项也可以指定MIME类型和文件名$curl-F'file=@哥老师.mp4;type=image/png'http://linuxblogs.cn/upload#也可以支持修改文件名,代替默认的$curl-F'file=@哥老师.mp4;file=sky.mp4'http://linuxblogs.cn/uploadhttps相关目前大部分网站都使用https。下面是一些常见的用法。1.忽略证书校验有时候访问https站点,服务器证书过期或者自签名证书使用curl访问会报错。您可以指定-k选项以忽略证书有效性验证。$curl-khttps://linuxblogs.cn2.指定的客户端证书有时需要双向验证,服务器端也需要对客户端进行验证,以确定客户端的真实身份。可以使用--cert和--key指定客户端证书。$curl--certclient.pem--keykey.pemhttps://linuxblogs.cn3。使用证书链验证服务器证书在正常开发中,证书一般是自签名的,可以通过指定CA证书链来验证证书。$curl--cacertcaChain.pemhttps://linuxblogs.cn高级功能(一)设置代理1.命令行通过命令行可以轻松实现curl代理功能$curl-x"http://user:pwd@127.0.0.1:1234""http://linuxblogs.cn"2.设置环境使用环境变量也很简单$exporthttp_proxy="http://user:pwd@127.0.0.1:1234"3.使用配置文件使用配置文件~/.curlrc,修改内容如下:proxy="http://user:pwd@127.0.0.1:1234"(2)格式平时使用curl时,可能要获取更多信息,比如请求耗时、访问延迟、请求大小等信息。比如你想在生产环境测试某个接口,你可以通过下面的方式获取你想要的数据,非常方便。#只获取http状态码$curl-s-w'%{http_code}'https://baidu.com-o/dev/null不好玩?直接上大招,首先需要准备格式模板。有了上面的格式模板,我们就可以轻松得到非常漂亮的统计数据。我们可以清楚的看到域名解析、连接建立时间、下载速度、状态码等数据。当然,curl支持的关键字段还有很多。更多字段请参考man手册。