curl介绍 curl是Linux系统上一款网络工具,它的首字母c代表的是client,表示它是客户端程序。通过URL方式,可以实现客户端与服务器之间传递数据。 它的功能非常强大,支持大部分常见的网络协议:HTTP、HTTPS、FTP。功能特性也很丰富,支持http、https、cookie、认证、代理、速率限制、断点续传,提供非常多的选项,熟练运用的话,基本可以取代postman这类图形工具。与liburl关系 其实curl项目包括两部分:curl和libcurl,关系大概如图所示 curl是命令行工具,底层调用的是libcurl库。libcurl是以库形式存在,提供各种功能C接口,供其他程序调用,包括curl命令安装使用 和wget不同,并非所有的Linux发行版中都安装了curl,你可以使用包管理器自行安装ubuntuordebianaptinstallcurlcentosorredhatyuminstallcurl 如果需要使用最新版本,或自定义安装,可以通过源码编译方式进行安装wgethttps:curl。sedownloadcurl7。79。1。tar。gz。configuremakemakeinstall 通过curlversion可以验证命令是否安装准确上手操作 我们先来看下curl最简单的使用方式,没有任何选项,将服务器响应的内容输出到屏幕上curlhttp:linuxblogs。cn 有时我们不想显示错误和进度信息,可以使用s选项开启静默模式curlshttp:linuxblogs。cn完全不输出任何内容,可以通过echo?来判断命令成功或失败curlsodevnullhttp:linuxblogs。cn 通过v选项可以非常详细地显示curl的整个工作过程,相当于打开了调试模式请求http 接着介绍我们平时最常用的,和http数据传输相关的操作 1。发送GET请求 curl命令默认发送的是GET请求,响应内容直接打印在了屏幕上curlhttp:www。baidu。com 使用i选项,可以打印服务器响应的HTTP头部信息先打印请求头,空一行,再打印网页内容curlihttp:www。baidu。com 如果只想测试该链接或资源是否正常,使用I选项,可以只打印响应头信息,注意此时发送的是HEAD请求 2。发送POST请求 默认情况下,curl发送的是GET请求,使用X参数可以指定发送POST请求,使用d参数可以指定请求数据无数据的POST请求curlxPOSThttp:www。domain。com发送Form数据curlduserfoopass123XPOSThttp:google。comlogin等价于上边命令curlduserfoodpass123http:google。comlogin 使用d选项后,默认就是POST请求,可以省略X选项,另外,使用多个d选项,可以使命令行显得更清晰 下边命令可以读取本地文件,作为数据向服务器发送curlddata。txthttp:google。comlogin 3。发送Json格式数据请求 curl可以发送json格式的请求,需要设置ContentType为applicationjsoncurld{user:foo,pass:123}HContentType:applicationjsonhttp:google。comlogin H选项指定ContentType请求头为json格式,这样web服务器就清楚数据类型,知道该怎么处理了 4。构造查询字符串参数 通过G选项,可以构造查询字符串参数curlGdqchopindcount20http:google。comsearch等价于下边命令curlhttp:google。comsearch?qchopincount20 上述命令会发送GET请求,如果忽略G选项,会发出一个POST请求 5。添加请求头 通过H选项,可以为请求添加标头curlHAcceptLanguage:enUShttp:google。com可以指定多个H选项curlHAcceptLanguage:enUSHSecretMessage:xyzzyhttp:google。com 6。设置重定向 默认curl不会跟随重定向,指定L选项会让请求跟随服务器重定向curlLhttp:api。twitter。comhello 7。设置静默输出 指定s选项将不输出错误和进度信息,如果想让curl不产生任何输出,使用下面的命令curlsodevnullhttp:google。com 8。详细的调试信息 指定v选项,会输出通信的整个过程,一般用于调试curlvhttp:www。baidu。com trace选项也可以用来调试,还可以输出更详细的内容,比如原始的二进制数据curltracehttp:www。baidu。com 9。模拟浏览器访问 A选项可以指定客户端的用户代理信息,即设置UserAgent请求头。curlAMozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome76。0。3809。100Safari537。36http:google。com 上面命令将UserAgent设置成了Chrome浏览器的标识。其实也可以直接通过H选项来指定curlHUserAgent:go1。15http:google。com 10。伪造refer解决防盗链 有时候,引用或下载某网站图片等资源时,会有防盗链的限制,可以通过设置refer请求头为站内域名来解决e参数来设置HTTP请求头Referercurlehttp:linuxblogs。cnhttp:linuxblogs。cngirl。jpgH参数也可以直接设置请求头ReferercurlHReferer:http:linuxblogs。cnhttp:linuxblogs。cngirl。jpg 11。设置Cookie b选项用来向服务器发送Cookie,该命令会生成一个请求头Cookie:foobar,向服务器发送一个Cookiecurlbfoobarhttp:google。com发送两个namemikehttp:google。com 也可以通过读取本地cookie文件,将其发送给服务器。c选项可以将服务器响应的Cookie写入一个文件curlbcookie。txthttp:google。com将cookie写入文件curlccookie。txthttp:baidu。com文件操作 1。下载文件资源 使用o或O选项,可以将网络资源保存到文件中等效于wgetcurlochopin。htmlhttp:linuxblogs。cnO选项,可以将URL的最后部分当做文件名curlOhttp:linuxblogs。cnbar。html 如果想显示下载进度条,可以使用选项 2。循环下载文件 有时候要下载的多个文件,只有名称后缀不同,可以这样来下载curlOhttp:linuxblogs。cndog〔15〕。jpg 3。压缩下载 使用compressed选项,允许你要求HTTP和HTTPS服务器提供数据的压缩版本,这在带宽有限的情况下,可以帮你节约不少时间curlcompressedhttp:linuxblogs。cnfoo。txt 4。限制下载速度 如果带宽不是很充足,多人共享带宽,curl支持限速功能curlhttp:linuxblogs。cnlimitrate200K 另外一个用法,就是模拟测试慢网速的场景,用于做开发测试 5。分块下载 有时文件会很大,我们采用可以分段的方式进行下载,最后合并为完成的文件curlr0100opart1。mp4http:linuxblogs。cncang。mp4curlr100200opart2。mp4http:linuxblogs。cncang。mp4curlr200opart3。mp4http:linuxblogs。cncang。mp4catpart。mp4cang。mp4 6。断点续传 有时候网络不太好,通过curl下载大文件时,可能发生中断的现象。使用C选项可以实现断点续传,非常实用curlCOhttp:linuxblogs。cngirl。mp4 在弱网环境下,加上retryN选项,可以在失败的时候多次重试,对下载操作更友好一些。 7。通过FTP下载文件 支持下载FTP文件,curl提供两种下载的语法curlOuuser:passftp:linuxblogs。cndog。jpgcurlOftp:user:passlinuxblogs。cndog。jpg 8。上传文件 平时开发时,可以通过curl实现文件的上传功能,非常高效。命令会给HTTP加上请求头ContentType:multipartformdatascurlFfile苍老师。mp4http:linuxblogs。cnupload F选项还可以指定MIME类型和文件名curlFfile苍老师。mp4;typeimagepnghttp:linuxblogs。cnupload还可以支持修改文件名,而不是默认的curlFfile苍老师。mp4;file天空。mp4http:linuxblogs。cnuploadhttps相关 目前大多数站点采用的都是https,这里给出几个常见的用法 1。忽略证书验证 有时访问https站点时,服务器证书过期或是自签证书,使用curl访问时会报错,可以指定k选项来忽略证书有效性验证。curlkhttps:linuxblogs。cn 2。指定客户端证书 有时需要双向验证,服务器也要验证客户端,用来确定客户端的真实身份。可以使用cert和key指定客户端证书curlcertclient。pemkeykey。pemhttps:linuxblogs。cn 3。使用证书链验证服务器证书 在平时开发时,证书一般是自签的,可以通过指定CA证书链进行证书的验证curlcacertcaChain。pemhttps:linuxblogs。cn高级功能 (一)设置代理 1。命令行 通过命令行,可以很简单的实现curl代理功能curlxhttp:user:pwd127。0。0。1:1234http:linuxblogs。cn 2。使用环境变量 通过设置环境的方式也很简单exporthttpproxyhttp:user:pwd127。0。0。1:1234 3。使用配置文件 使用配置文件。curlrc,修改内容如下:proxyhttp:user:pwd127。0。0。1:1234 (二)格式化 在平时使用curl时,可能希望能够获取更多信息,如请求耗时、访问时延、请求大小等信息。比如在生产环境要测试某个接口,可以通过如下的方式,获取你想要的数据,非常方便。只获取http状态码curlsw{httpcode}https:baidu。comodevnull 不过瘾?直接上大招,首先需要准备格式模板 有了上边的格式模板,我们就可以轻松获取非常漂亮的统计数据 我们可以很清晰地看到,域名解析、连接建立时间、下载速度、状态码等数据。当然curl支持的关键字段还有很多,更多的字段可以参考man手册。