找回密码
 加入怎通
查看: 169|回复: 0

命令行http调试利器curl如何使用?(命令与提示符怎么打开文件)

[复制链接]
我来看看 发表于 2023-03-17 18:43:41 | 显示全部楼层 |阅读模式
9 K$ g3 w) f* O4 T& d" F! h7 O

curl,全称CommandLine URL 或 CommandLine Uniform Resource Locator,顾名思义,curl命令是在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输。

9 D7 {* ?4 `) W

crul的官方网站是 https://curl.haxx.se/ , 我们可以通过该网站获取此工具的最新版本,还有最全面的使用方法从官网可以知道,curl支持30多种类型的传输方式,例如:FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet and TFTP等,这当中包含多种协议。

3 ? K# i. m! E+ E* i" X- G, K( M

最常使用的有FILE、FTP、HTTP、HTTPS等协议对于运维人员来说,在我们探测远程服务的时候,比如http传输,SOCKET连接时,这个工具能非常方便的作为验证工具和测试工具下面看几个curl典型应用实例。

$ `+ r* y: Q1 ~

1、 仅仅显示header信息这个用法运维人员经常使用,可以探测一个网站的header信息,例如:[root@localhost~]#curl-Ihttps://www.ixdba.netHTTP/1.1

$ j! {. t. m% G! r: ], P

200OKServer:nginx/1.13.9Date:Mon,04Mar201908:11:31GMTContent-Type:text/html;charset=UTF-8Connection:keep-alive

~ i3 B* X) R5 P

通过curl的“-I”(大写的i)参数可以获取指定网站的header头信息,可以发现上面这个网站可以正常访问(200状态码),同时此网站的web服务器是nginx/1.13.9,并且还开启了keep-alive。

, Y5 C( b' Z3 q* X0 a" X

这些信息都是web运维必须要具备的2、显示http状态代码http状态码对web运维来讲,非常重要,在对web页面进行监控的时候,会经常通过状态码来判断网页的状态,如果返回状态码为非200状态,那么则认为网页异常。

* x! F# d B/ }( L& D5 b, B6 t

要获取网页状态码,除了上面的“-I”参数外,还有更专业的方法,那就是使用 “-s”和“-o”参数组合,最后使用“-w”参数,可以这样使用:[root@localhost ~]#curl -s -o /dev/

0 d2 L0 J0 f* ~% s& f, l4 f3 ]4 o

null -w %{http_code}"\n" http://www.baidu.com200其中:? “-s”: 表示安静模式,不输出错误,或者进度条之类的? “-o”: 表示指定输出结果到某个文件,不指定的话默认是终端。

* z$ g" o7 n1 \6 h/ _4 ~ Q

这里是将结果写入空设备中? “-w”表示输出一些定义的元数据,这里输出的是%{http_code},即http状态码除去http_code,还有http_connect、time_total、time_connect、time_appconnect、time_redirect、size_download 、size_upload 、content_type、ssl_verify_result等变量可供选择。

7 F# I( ?. A3 h$ ?2 h1 k

输出变量需要按照%{variable_name}的格式? “\n”表示换行再来看个例子,通过http协议访问一个网站,命令如下:[root@localhost ~]#curl -s -o /dev/null

7 `; L) b% {: y" R7 B* `

-w %{http_code}" "%{time_total}" "%{redirect_url}"\n" http://www.ixdba.net3010.141 https://www.ixdba.net/

" `# s% l- {4 D, V5 O

可以看到输出结果有个301,这表示当通过http访问此网站的时候,自动跳转到了https,执行了301定向操作,所以状态码变成了301,第二个输出“0.141”是变量“%{time_total}”解析出的结果,代表总时间,按秒计。

8 r. H$ ^: ]7 k, I6 d, z

精确到小数点后三位,最后的“https://www.ixdba.net/” 是"%{redirect_url}"变量的输出结果,代表跳转后的url3、使用curl实现url地址重定向(自动跳转)默认情况下CURL不会发送HTTP Location headers(重定向),但使用了“-L”选项后,当一个被请求页面移动到另一个站点时,就会发送一个HTTP Loaction header作为请求,然后将请求重定向到新的地址上。

6 K. ]) w& F& j1 u- ^6 ]. }6 m

例如:访问http://www.ixdba.net 时,会自动将地址重定向到 https://www.ixdba.net 上[root@localhost~]#curl-L-Ihttp://www.ixdba.net

1 a$ y+ B/ n: U

HTTP/1.1301MovedPermanentlyServer:nginx/1.13.9Date:Fri,01Mar201907:25:57GMTContent-Type:text/htmlContent-Length:

* J3 {1 i6 [. W/ y9 l

185Connection:keep-aliveLocation:https://www.ixdba.net/Strict-Transport-Security:max-age=31536000;includeSubDomains;

$ W P' `- R1 f* G6 J

preloadHTTP/1.1200OKServer:nginx/1.13.9Date:Fri,01Mar201907:25:58GMTContent-Type:text/html;charset=UTF-8

6 t' u: f/ K6 S# G

Connection:keep-alive输出有两个部分,可以看到有自动的跳转,这是因为使用了-L参数,curl就会跳转到新的网址4、抓取网页内容,并保存到本地curl也能下载文件,达到跟wget相同的功能,例如将一个url文件保存到本地,保存原始文件名,可以通过“-O”参数实现:。

* |1 N' Q9 M2 U/ T$ K

[root@localhost ~]# curl -O https://www.ixdba.net/archives/2017/06/653.htm但是有时候url中的文件名不固定或者想下载后重命名,可以通过“-o”实现,例如将url中的文件下载到本地,并命名为test.html,命令如下:

8 J2 {6 s# o% ]7 j$ Q1 M; V u

[root@localhost ~]#curl-otest.htmlhttps://www.ixdba.net/archives/2017/06/653.htm这里面涉及两个curl参数,分别是:? -o/--output 将文件保存为命令行中指定的文件名的文件中

: y6 l3 @6 M; B

? -O/--remote-name 使用URL中默认的文件名保存文件到本地5、通过curl下载文件并开启断点续传curl也可以实现下载大文件,并实现断点续传,先看下面这个例子,如下图所示:

6 R) j: _0 |% l3 \

可以看到,curl下载文件其实比wget更好用,可以看到下载文件时的各个属性,文件总大小,已下载大小,下载耗时多少,下载速度多少等等在下载一会后,执行ctrl+c,中断下载,接着再次执行curl下载,看看是否能够实现断点续传功能,如下图所示:。

. E5 T& A: A- }

这里使用了三个参数:-C/--continue-at : 断点续转,注意断点续传的参数是-C, 要自动续传的话要使用 "-C -", 否则需要手工指定断点的字节位置这个特别注意6、对CURL的最大网络使用带宽进行限速。

1 I8 P3 c2 {$ ?+ {# l+ j" x7 k

与wget类似,curl在下载文件时也会占满系统带宽,这样一来,可能会影响线上业务系统的正常运行,因此,限速也是要做的,可以通过“--limit-rate”选项,实现对curl下载网速限制,来看一个例子:

# R0 x7 |) g6 L( a1 y1 a

这是限制下载速度为2M,看最下面的下载速度刚好是2048k左右,实现了带宽限速7、通过CURL访问需要授权的页面在访问需要授权的页面时,可通过-u选项提供用户名和密码进行授权[root@localhost ~]。

/ W5 Q4 Y( D) o% k

# curl -u username:password URL上面的做法很明显,存在密码泄露的风险,通常的做法是在命令行只输入用户名,之后会提示输入密码,这样可以保证在查看历史记录时不会将密码泄露[root@localhost ~]。

( V' s* Y; J, A

# curl -u username URL8、通过curl从FTP服务器下载、上传文件CURL不但支持http,同样也支持FTP下载,若在url中指定的是某个文件路径而非具体的某个要下载的文件名,CURL则会列出该目录下的所有文件名而并非下载该目录下的所有文件

) C% o- f4 z* b. \8 V. y Q$ K

例如:列出public_html下的所有文件夹和文件curl-uftpuser:ftppassftp://ftp_server/public_html/ 看下面这个例子,如下图所示:

. [, E- k R c* p& {

要下载一个文件,可以执行如下命令:curl-uftpuser:ftppass-Oftp://ftp_server/public_html/getssl.php例如下图操作:

, N, K1 x* I# ?

除了下载操作,curl也可以将文件上传到FTP服务器上,通过“-T”选项可将指定的本地文件上传到FTP服务器上例如:将myfile.txt文件上传到服务器:curl-uftpuser:ftppass-T

" ^) w" k9 m* v

myfile.txtftp://ftp.testserver.com看下图操作:

- L: H. L7 ~% b( ?3 N! H( n% b2 Y5 W

curl也可以同时上传多个文件,方法如下:curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.comcurl还可以从标准输入获取内容保存到服务器指定的文件中,方法如下:

& v( d5 ?$ Z4 o2 g

curl-uftpuser:ftppass-T-ftp://ftp.testserver.com/myfile_1.txt9、CURL使用SSL证书访问HTTPS有时候在通过curl下载基于https的链接文件时,会提示ssl认证失败,或者ssl不可信,此时可以使用 -k 或者“-insecure”选项,来忽略签名认证的警告。

% b4 L3 U& b1 ]! r& R; {2 T- x

这样就可以让curl命令执行不安全的SSL连接,进而去获取数据命令使用示例如下:curl -k https://abc.com 6 Y" p$ E' M+ l curl --insecure https://www.tttao.com

. e' l/ X" N& v# l3 M( u) T& H# l( N- V$ ] : E: ^+ `# [, D! I0 q, k 2 D* n: b: I8 v }4 B4 P, t' f8 P
回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-7-8 17:15 , Processed in 0.033567 second(s), 25 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表