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

还在用Postman?教你使用Curl提高工作效率

时间:2023-03-21 17:59:28 科技观察

curl是Linux系统上的一个网络工具。它的首字母c代表client,表示它是一个客户端程序。通过URL方法,可以在客户端和服务器之间传输数据。它非常强大,支持大多数常见的网络协议:HTTP、HTTPS、FTP。功能也很丰富,支持http、https、cookie、认证、代理、限速、断点续传,提供了非常多的选项。如果熟练使用,基本可以替代postman等图形化工具。与liburl的关系实际上,curl项目包括两个部分:curl和libcurl。关系大致如图所示。curl是命令行工具,底层调用libcurl库。libcurl以库的形式存在,提供各种函数式C接口供其他程序调用,包括curl命令的安装和使用。与wget不同,curl并未安装在所有Linux发行版中。可以使用包管理器自己安装#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#No完全没有输出,你可以使用“echo$?”判断命令成功与否$curl-s-o/dev/nullhttp://linuxblogs.cn通过-v选项可以很详细的显示curl的整个工作过程,相当于开启调试模式请求http。然后介绍最常用的与http数据传输相关的操作1.发送GET请求curl命令默认发送GET请求,响应内容直接打印在屏幕上。$curlhttp://www.baidu.com使用-i选项打印服务器响应的HTTP头信息#先打印请求头,空一行,再打印网页内容$curl-ihttp://www.baidu.com如果只想测试链接或资源是否正常,使用-I选项只打印响应头信息,注意此时发送的是HEAD请求2。发送POST请求默认情况下,curl发送GET请求。使用-X参数指定发送POST请求,使用-d参数指定请求数据#POSTrequestwithoutdata$curl-xPOSThttp://www.domain。com#发送表单数据$curl-d'user=foo&pass=123'-XPOSThttp://googlee.com/login#相当于上面的命令$curl-d'user=foo'-d'pass=123'http://google.com/login使用-d选项后默认是POST请求,可以省略-X选项,另外,使用多个-d选项可以让命令行更清晰下面的命令可以读取本地文件,并作为数据发送到服务器$curl-d'@data.txt'http://google.com/登录3。发送Json格式数据请求curl可以发送json格式请求,需要设置Content-Type为application/json$curl-d'{"user":"foo","pass":"123"}'\-H'Content-Type:application/json'\http://google.com/login-H选项指定Content-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请求。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://谷歌.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.com。有防盗链限制,可以通过设置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#Send两个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选项将网络资源保存到文件中name$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/狗.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高级功能(一)设置proxy1.命令行通过命令行可以轻松实现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手册。本文转载自微信公众号《编程修真》,可通过以下二维码关注。转载本文请联系编程实践公众号。