0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

cURL的使用方法

xCb1_yikoulinux 来源:一口Linux 作者:一口Linux 2022-08-05 11:54 次阅读

认识 cURL

A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP. libcurl offers a myriad of powerful features

curl 是常用的开源命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。它支持包括 FTP、HTTP、HTTPS、FTP、SCP,SFTP 数十种协议。如能熟练使用,可以在很多应用场景下,发挥巨大的价值。

cURL 的使用

代替 Postman ?

curlhttps://www.baidu.com

如上命令,不带有任何参数时,curl 就是发出 GET 请求,服务器返回的内容会在命令行输出。当然,你还可以为其添加各种参数(如 -A、-b、-c、-d、-e、-F、-H 等等),使得可以完成更多复杂任务;

其实,如果只是简单的 Post、Get 请求,用 cURL 做像接口测试的工作是非常方便的。

有人说了,Postman 它不香吗?

是的,挺香的,但是当你在环境受限的情况下,比如 在 linux 服务器上想测试一下接口通不通没有 Postman 怎么办?

这时候 cURL 就体现出它的价值了。此外贴心的 Postman,还为我们提供了各种语言和 cURL 的 snippet,方便你在 Postman 编辑完成后直接拿走开发和调试使用。

db97bf1c-1471-11ed-ba43-dac502259ad0.jpg

如上图,你直接 copy 内容,然后在命令行执行就可以了。

dbbf1eae-1471-11ed-ba43-dac502259ad0.jpg

小工具了解一下

jsonplaceholder http://jsonplaceholder.typicode.com/

免费的 HTTP 请求假数据接口,前端同学可以了解一下

  • 不需引入外部 js 文件。
  • 同时支持 http 和 https 请求。
  • 同时支持 post 请求和 get 请求。

看看 cookie?

curl-bcookies.txthttps://www.youku.com

上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件 cookies.txt。

上传个文件?

网站中上传文件功能很普遍,然而你是怎么调试的呢?

打开页面,选择文件后再点击上传按钮?然后 F12 看看 Request、Response? 或者打开 Postman 进行类似步骤?

可真够麻烦的。用 cURL 一行命令搞定

这里先介绍一下 -v 参数:

使用 -v 参数使 curl 打印有关请求和响应的详细信息。以 > 为前缀的行是发送给服务器的数据,以 < 为前缀的行是从服务器接收的数据,以 * 开头的行是杂项信息,如连接信息、SSL 握手信息、协议信息等。

我们看个例子,搞下百度:

❯curl-vhttps://www.baidu.com
*Trying110.242.68.3:443...
*Connectedtowww.baidu.com(110.242.68.3)port443(#0)
*ALPN:offersh2
*ALPN:offershttp/1.1
*TLSv1.3(OUT),TLShandshake,Clienthello(1):
*TLSv1.3(IN),TLShandshake,Serverhello(2):
*TLSv1.2(IN),TLShandshake,Certificate(11):
*TLSv1.2(IN),TLShandshake,Serverkeyexchange(12):
*TLSv1.2(IN),TLShandshake,Serverfinished(14):
*TLSv1.2(OUT),TLShandshake,Clientkeyexchange(16):
*TLSv1.2(OUT),TLSchangecipher,Changecipherspec(1):
*TLSv1.2(OUT),TLShandshake,Finished(20):
*TLSv1.2(IN),TLShandshake,Finished(20):
*SSLconnectionusingTLSv1.2/ECDHE-RSA-AES128-GCM-SHA256
*ALPN:serveracceptedhttp/1.1
*Servercertificate:
*subject:C=CN;ST=beijing;L=beijing;OU=serviceoperationdepartment;O=BeijingBaiduNetcomScienceTechnologyCo.,Ltd;CN=baidu.com
*startdate:Jul505022022GMT
*expiredate:Aug605012023GMT
*subjectAltName:host"www.baidu.com"matchedcert's"*.baidu.com"
*issuer:C=BE;O=GlobalSignnv-sa;CN=GlobalSignRSAOVSSLCA2018
*SSLcertificateverifyok.
>GET/HTTP/1.1
>Host:www.baidu.com
>User-Agent:curl/7.83.1
>Accept:*/*
>
*Markbundleasnotsupportingmultiuse
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2443
< Content-Type: text/html
< Date: Fri, 22 Jul 2022 1009 GMT
< Etag: "588603e2-98b"
< Last-Modified: Mon, 23 Jan 2017 1346 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<

百度一下,你就知道
新闻hao123地图视频贴吧更多产品
关于百度AboutBaidu

©2017Baidu使用百度前必读意见反馈京ICP证030173号

*Connection#0tohostwww.baidu.comleftintact

可以看到,包括握手过程、请求、响应信息一应俱全。

加 -v 参数的作用就是就是为了跟踪(trace)一下请求,看看具体细节,这跟你 F12 的目的是一样的。此外,如果你想看到具体的请求、响应时间点可以加入 --trace-time 参数,最后的命令如下:

curl-v--trace-timehttps://www.baidu.com

效果是这样的:

❯curl-v--trace-timehttps://www.baidu.com
1850.680025*Trying110.242.68.4:443...
1850.692744*Connectedtowww.baidu.com(110.242.68.4)port443(#0)
1850.693142*ALPN:offersh2
1850.693165*ALPN:offershttp/1.1
1850.706507*TLSv1.3(OUT),TLShandshake,Clienthello(1):
1850.723346*TLSv1.3(IN),TLShandshake,Serverhello(2):
1850.723509*TLSv1.2(IN),TLShandshake,Certificate(11):
1850.724242*TLSv1.2(IN),TLShandshake,Serverkeyexchange(12):
1850.724370*TLSv1.2(IN),TLShandshake,Serverfinished(14):
1850.724572*TLSv1.2(OUT),TLShandshake,Clientkeyexchange(16):
1850.724628*TLSv1.2(OUT),TLSchangecipher,Changecipherspec(1):
1850.724727*TLSv1.2(OUT),TLShandshake,Finished(20):
1850.740045*TLSv1.2(IN),TLShandshake,Finished(20):
1850.740086*SSLconnectionusingTLSv1.2/ECDHE-RSA-AES128-GCM-SHA256
1850.740105*ALPN:serveracceptedhttp/1.1
1850.740129*Servercertificate:
1850.740160*subject:C=CN;ST=beijing;L=beijing;OU=serviceoperationdepartment;O=BeijingBaiduNetcomScienceTechnologyCo.,Ltd;CN=baidu.com
1850.740182*startdate:Jul505022022GMT
1850.740200*expiredate:Aug605012023GMT
1850.740256*subjectAltName:host"www.baidu.com"matchedcert's"*.baidu.com"
1850.740298*issuer:C=BE;O=GlobalSignnv-sa;CN=GlobalSignRSAOVSSLCA2018
1850.740317*SSLcertificateverifyok.
1850.740391>GET/HTTP/1.1
1850.740391>Host:www.baidu.com
1850.740391>User-Agent:curl/7.83.1
1850.740391>Accept:*/*
1850.740391>
1850.753580*Markbundleasnotsupportingmultiuse
1850.753605< HTTP/1.1 200 OK
1850.753623 < Accept-Ranges: bytes
1850.753641 < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
1850.753661 < Connection: keep-alive
1850.753680 < Content-Length: 2443
1850.753703 < Content-Type: text/html
1850.753725 < Date: Fri, 22 Jul 2022 1050 GMT
1850.753762 < Etag: "588603e2-98b"
1850.753789 < Last-Modified: Mon, 23 Jan 2017 1346 GMT
1850.753809 < Pragma: no-cache
1850.753831 < Server: bfe/1.0.8.18
1850.753856 < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
1850.753878 <

接下来就是上传的部分了,-F 参数用来向服务器上传二进制文件。

❯curl-v--trace-time'https://postman-echo.com/post'-F'fileName=@"/Users/xiaobox/Desktop/cookies.txt"'

解释一下这行命令:

-F 参数可以指定 MIME 类型,也可以改文件名。

curl-v--trace-time'https://postman-echo.com/post'-F'fileName=@/Users/xiaobox/Desktop/cookies.txt;type=text/plain;filename=me.txt'

最后总结,如果你想用一条 cURL 命令测试上传接口,可以利用类似下面的参数组合:

curl-v--trace-time'https://postman-echo.com/post'-F'fileName=@/Users/xiaobox/Desktop/cookies.txt;type=text/plain;filename=me.txt'

弱网测试

顾名思义,就是模拟你的客户端用户在网络较差的环境下,比如 网速很低的时候,网络请求的情况。

我们还是拿百度举例子,你可以用以下一组命令在 1k 和 200B 的不同速度下对比看看响应情况:

curl-v--trace-time--limit-rate1khttp://www.baidu.com

curl-v--trace-time--limit-rate200Bhttp://www.baidu.com

注意 limit-rate 是同时限制 request 和 response,也就是 请求、响应都限制成一样的速率了。

自动重定向

❯curlhttps://www.bilibili.com
Redirectingto"//www.bilibili.com/?rt=V%2FymTlOu4ow%2Fy4xxNWPUZ91QLE3Z%2BfhZ8P5SQVD30Nw%3D">//www.bilibili.com/?rt=V%2FymTlOu4ow%2Fy4xxNWPUZ91QLE3Z%2BfhZ8P5SQVD30Nw%3D.%

你看到了 B 站给我们重定向了,我们可以利用 -L 参数让 cURL 自动重定向。

curl-Lhttsp://www.bilibili.com

注意 是大写的 L

科学上网后 cURL 不通?

假设你已经配置了科学上网,我们直接 cURL google 看一下

❯curl-vhttps://www.google.com
*Trying74.86.151.167:443...
*connectto74.86.151.167port443failed:Operationtimedout
*Failedtoconnecttowww.google.comport443after75400ms:Operationtimedout
*Closingconnection0
curl:(28)Failedtoconnecttowww.google.comport443after75400ms:Operationtimedout

一般情况下是失败的

再假设你用的 VPN 客户端是 clashX 因为我用的是这个,就用这个举例。

dbd1e494-1471-11ed-ba43-dac502259ad0.jpg

点击 “复制终端代理命令”,然后在你的终端执行一下:

exporthttps_proxy=http://127.0.0.1:7890http_proxy=http://127.0.0.1:7890all_proxy=socks5://127.0.0.1:7890

再用 cURL, 你会发现就可以成功了。如果你用的不是 clashX 其他的 VPN 客户端应该也有类似功能

保存响应内容 ?

可以利用 -o 参数将响应的结果保存到文件中:

curl-ogoogle.txthttps://www.google.com

下载文件并显示进度?

cURL 可以当 wget 用

-o 参数将服务器的回应保存成文件,等同于 wget 命令

下载文件的同时显示进度可以使用类似下面的命令:

❯curl-#-opic.jpghttps://w.wallhaven.cc/full/pk/wallhaven-pk6993.png

参数太多,不想拼?

cURL 是好用,但如果我是个 web 应用,需要拼接一堆参数,那太麻烦了,简直劝退。

是的,所以 浏览器也想到了,你可以在浏览器先正常发出请求,然后利用浏览器的工具将 cURL 的命令复制出来。

dbfb7142-1471-11ed-ba43-dac502259ad0.jpg

可以复制单个请求,也可以是页面的所有请求。然后你就可以粘贴到终端执行了。

是不是很方便 ?

获取所在地 IP

curl-Ltool.lu/ip
#or
curl-Lip.tool.lu
dc2a585e-1471-11ed-ba43-dac502259ad0.jpg

获取天气预报?

我们看看北京的:

curl'wttr.in/Beijing?lang=zh'
dc5544a6-1471-11ed-ba43-dac502259ad0.jpg

吐槽苹果

这是一则去年关于 cURL 的旧新闻:https://www.163.com/dy/article/GTOGN8D20544B1XD.html

curl 作者吐槽苹果把他当做免费工具人

了解这样的新闻可以帮助你更深刻地认识开源、商业以及整个软件的生态情况。
审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

原文标题:妙用 cURL

文章出处:【微信号:yikoulinux,微信公众号:一口Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用curl+wget抓取网页方法

    Linux抓取网页,简单方法是直接通过 curl 或 wget 两种命令。curl 和 wget 命令,目前已经支持Linux和Windows平台,后续将介绍。curl 和 wget支
    发表于 02-25 09:54

    curl文件下载工具的使用方法

    curl文件下载工具的使用方法 curl是一个利用URL语法在命令行方
    发表于 12-04 13:03 1683次阅读

    示波器的使用方法

    示波器的使用方法 1 示波器使用        本节介绍示波器的使用方法。示波器种类、型号很多,功能也不同。
    发表于 01-14 13:06 1.8w次阅读

    Matlab使用方法和程序设计

    Matlab使用方法和程序设计 实验一 Matlab使用方法和程序设计一、
    发表于 10-17 00:18 5276次阅读
    Matlab<b class='flag-5'>使用方法</b>和程序设计

    示波器的使用方法

    数字万用表使用方法和示波器的使用方法详解。
    发表于 03-14 10:38 32次下载

    AT指令使用方法

    AT指令使用方法
    发表于 07-21 14:18 23次下载

    xilinx 原语使用方法

    xilinx 原语使用方法
    发表于 10-17 08:57 11次下载
    xilinx 原语<b class='flag-5'>使用方法</b>

    CC debuger的使用方法

    CC debuger的使用方法
    发表于 10-18 10:07 5次下载

    ORCAD PSPICE 使用方法

    ORCAD PSPICE 使用方法
    发表于 10-18 14:52 39次下载
    ORCAD PSPICE <b class='flag-5'>使用方法</b>

    xilinx原语使用方法

    xilinx原语使用方法
    发表于 10-19 08:50 15次下载
    xilinx原语<b class='flag-5'>使用方法</b>

    git使用方法

    git使用方法
    发表于 10-24 09:45 19次下载
    git<b class='flag-5'>使用方法</b>

    示波器的使用方法(三):示波器的使用方法详解

    示波器的使用方法并非很难,重点在于正确使用示波器的使用方法。往期文章中,小编对模拟示波器的使用方法和数字示波器的使用方法均有所介绍。为增进大家对示波器的
    的头像 发表于 12-24 20:37 2949次阅读

    simple curl操作类

    ./oschina_soft/curl.zip
    发表于 05-30 11:02 1次下载
    simple <b class='flag-5'>curl</b>操作类

    Linux系统如何安装curl

    `curl`是用于在本地计算机与远程服务器之间传输数据的命令行工具。使用curl时您可以使用HTTP,HTTPS, SCP , SFTP和FTP等协议下载或上传数据。
    的头像 发表于 12-06 16:53 1.7w次阅读

    curl命令接入onenet简单使用

    上一篇帖子讲解了用fiddler软件生成http报文然后上传数据点到onenet,恰好在网上搜索到了cuel命令也可以,所以在这里就想发一篇帖子记录下吧。用curl命令十分简单快捷,但是需要
    发表于 10-20 17:11 0次下载
    <b class='flag-5'>curl</b>命令接入onenet简单使用