找回密码
 加入怎通
查看: 250|回复: 3

curl命令使用(curl命令怎么使用)

[复制链接]
我来看看 发表于 2023-03-21 23:04:10 | 显示全部楼层 |阅读模式
_/ T g' @) A& T4 c4 _

curl是一个非常实用的、用来与服务器之间传输数据的工具;支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl设计为无用户交互下完成工作;curl提供了很多非常有用的功能,包括代理访问、用户认证、ftp上传下载、HTTP POST、SSL连接、cookie支持、断点续传...。

& N! S: s* l! n

一、最常用的curl命令1、发送GET请求curl URL " C G p& }1 ?& V" H2 L! t curl URL?a=1&b=helloworld2、发送POST请求curl -X POST -d a=1&b=helloworld URL

' i. S8 U5 T' H) S6 \* l

3、发送json格式请求:curl -H "Content-Type: application/json" -X POST -d {"abc":123,"bcd":"nihao"} URL2 v+ K2 Z0 ~8 _ curl -H "Content-Type: application/json" -X POST -d @test.json URL

( e! J# Q% v4 Z6 u( t

其中,-H代表header头,-X是指定什么类型请求(POST/GET/HEAD/DELETE/PUT/PATCH),-d代表传输什么数据这几个是最常用的查看所有curl命令: man curl或者curl -h。

; U+ X8 h2 ? A7 J ~+ A. K4 P& r' j

请求头:H,A,e响应头:I,i,Dcookie:b,c,j传输:F(POST),G(GET),T(PUT),X输出:o,O,w断点续传:r调试:v,--trace,--trace-ascii,--trace-time

7 T( I0 p2 \5 Y V* N

二、curl命令语法与curl命令参数详解1、curl命令语法curl [options] [URL...]2、curl命令参数详解由于linux curl功能十分强大,所以命令参数十分多,下表只是爱E族(

! ?4 Q- R3 j7 e4 N

http://aiezu.com)帅选出来的部分参数,更多参数请运行“man curl”命令查看参数组参数描述urlurl需要抓取的一到多个URLs;多个下面通配符的方式:  1、http://{www,ftp,mail}.。

7 v. E3 u }8 ~& T

http://aiezu.com;  2、http://aiezu.com/images/[001-999].jpg;  3、http://aiezu.com/images/[1-999].html;  4、ftp://aiezu.com/file[a-z].txt

/ ?# t9 @; b+ j5 O1 C: R9 s

请求头-H "name: value"--header "name: value"(HTTP)添加一个http header(http请求头);-H "name:"--header "name:"(HTTP)移除一个http header(http请求头);

! B- M+ t0 L" V N# |

-A "string"--user-agent "string"【参考】(HTTP)设置Http请求头“User-Agent”,服务器通过“User-Agent”可以判断客户端使用的浏览器名称和操作系统类型,伪造此参数能导致服务器做出错误判断。

# N1 g5 M s4 Y$ c- K2 L" W

也可以使用“-H”, “--header option”设置此选项;-e --referer 【参考】(HTTP)设置访问时的来源页面,告诉http服务从哪个页面进入到此页面;-e "

3 r4 S/ b3 C: a ^

http://aiezu.com"相当于“-H "Referer: http://www.qq.com"”;响应头-I--head(HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)。

9 P# K+ v0 V; G# L* C7 c( X

用于HTTP服务时,获取页面的http头; (如:curl -I http://aiezu.com)用于FTP/FILE时,将会获取文件大小、最后修改时间; (如:curl -I file://test.txt)

1 B$ o* u G9 `0 Y

-i--include(HTTP)输出HTTP头和返回内容;-D --dump-header (HTTP)转储http响应头到指定文件;cookie-b name=data--cookie name=data【参考】

6 B/ j* n& T/ U7 g6 b5 f8 a& h

(HTTP)发送cookie数据到HTTP服务器,数据格式为:"NAME1=VALUE1; NAME2=VALUE2";如果行中没有“=”,将把参数值当作cookie文件名;这个cookie数据可以是由服务器的http响应头“Set-Cookie:”行发送过来的;

+ }% f' h! j: i! a' W

-c filename--cookie-jar file name【参考】(HTTP)完成操作后将服务器返回的cookies保存到指定的文件;指定参数值为“-”将定向到标准输出“如控制台”;-j--junk-session-cookies

# c* p$ s$ {8 a- t' E

(HTTP)告诉curl放弃所有的"session cookies";相当于重启浏览器;代理-x host:port-x [protocol://[user:pwd@]host[:port]--proxy [protocol://[user:pwd@]host[:port]【参考】

# v! f* k: q# f- ` d* x) d! O

使用HTTP代理访问;如果未指定端口,默认使用8080端口;protocol默认为http_proxy,其他可能的值包括:http_proxy、HTTPS_PROXY、socks4、socks4a、socks5;如:--proxy 8.8.8.8:8080;-x "http_proxy://aiezu:123@aiezu.com:80"

" R- _" E$ U K) ]9 s. ^3 ]% a* g# z

-p--proxytunnel将“-x”参数的代理,作为通道的方式去代理非HTTP协议,如ftp;--socks4 --socks4a --socks5 【参考】

$ w/ u/ j7 y7 u/ S. z0 t

使用SOCKS4代理;使用SOCKS4A代理;使用SOCKS5代理;此参数会覆盖“-x”参数;--proxy-anyauth--proxy-basic--proxy-diges--proxy-negotiate--proxy-ntlm

$ K' ]0 _ S* D* a. E$ e( g, E

http代理认证方式,参考:--anyauth--basic--diges--negotiate--ntlm-U --proxy-user 设置代理的用户名和密码;

" u, w# y6 D) M) r3 f

数据传输-G--get【参考】如果使用了此参数,“-d/”、“--data”、“--data-binary”参数设置的数据,讲附加在url上,以GET的方式请求;-d @file-d "string"--data "string"--data-ascii "string"--data-binary "string"--data-urlencode "string"【参考】

/ o" X+ E' P: N' C' f9 P# Y, A+ N

(HTTP)使用HTTP POST方式发送“key/value对”数据,相当于浏览器表单属性(method="POST",enctype="application/x-www-form-urlencoded")  -d,--data:HTTP方式POST数据;  --data-ascii:HTTP方式POST ascii数据;  --data-binary:HTTP方式POST二进制数据;  --data-urlencode:HTTP方式POST数据(进行urlencode);如果数据以“@”开头,后紧跟一个文件,将post文件内的内容;

9 v- a* [# f0 B. p1 X4 q" t

-F name=@file-F name=

" d$ C& k0 |4 [

如果字段内容以“@”开头,剩下的部分应该是文件名,curl将会上传此文件,如:curl -F "pic=@pic.jpg" http://aiezu.com;curl -F "page=@a.html;type=text/html"

- l- W& {% \; T5 W

http://aiezu.comcurl -F "page=@/tmp/a;filename=a.txt" http://aiezu.com如果字段内容以“<”开头,剩下的部分应该是文件名,curl将从文件中获取作为此字段的值,如:curl -F "text=

D {" k% ~) F

http://aiezu.com;--form-string (HTTP)类似于“--form”,但是“@”、“<”无特殊含义;-T file--upload-file file通过“put”的方式将文件传输到远程网址;选项参数只使用字符"-",将通过stdin读入文件内容;如:cat test.txt|curl "

* O+ j* {& }1 J

http://aiezu.com/a.php" -T - curl "http://aiezu.com/a.php" -T -

+ d# |& ~# G7 W2 }' F, @

http://aiezu.comcurl -T "img[1-1000].png" http://aiezu.com断点续传-C --continue-at 断点续转,从文件头的指定位置开始继续下载/上传;offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;

% q/ j4 R8 m. c7 H. J

-r --range (HTTP/FTP/SFTP/FILE) 只传输内容的指定部分:0-499:最前面500字节;-500:最后面500字节;9500-:最前面9500字节;0-0,-1:最前面和最后面的1字节;100-199,500-599:两个100字节;

6 a d" D8 V% F# t% X9 j" h$ z

认证--basic(HTTP)告诉curl使用HTTP Basic authentication(HTTP协议时),这是默认认证方式;--ntlm(HTTP)使用NTLM身份验证方式,用于HTTP协议;一般用于IIS使用NTLM的网站;

" K2 a8 f* V) _9 S2 R5 W% s2 g

--digest(HTTP)使用HTTP Digest authentication加密,用于HTTP协议;配合“-u/--user”选项,防止密码使用明文方式发送;--negotiate(HTTP)使用GSS-Negotiate authentication方式,用于HTTP协议;它主要目的是为它的主要目的是为kerberos5认证提供支持支持;

: [6 ^' ?# C! l0 C: J

--anyauth(HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式;-u user:password--user user:password使用用户名、密码认证,此参数会覆盖“-n”、“--netrc”和“--netrc-optional”选项;如果你只提供用户名,curl将要求你输入密码;如果你使用“SSPI”开启的curl库做“NTLM”认证,可以使用不含用户名密码的“-u:”选项,强制curl使用当前登录的用户名密码进行认证;此参数相当于设置http头“Authorization:”;

# }8 I1 ^) r3 m* D. Q- R

证书-E --cert (SSL)指定“PEM”格式的证书文件和证书密码;--cert-type (SSL)告诉curl所提供证书的类型:PEM、DER、ENG等;默认为“PEM”;

( G$ v3 x) Q. ?% R' f

--cacert (SSL)告诉curl所以指定的CA证书文件,必须是“PEM”格式;--capath (SSL)告诉curl所以指定目录下的CA证书用来验证;这些证书必须是“PEM”格式;

' W F5 ?. {8 Q3 l

--crlfile (HTTPS/FTPS)提供一个PEM格式的文件,用于指定被吊销的证书列表;-k--insecure(SSL)设置此选项将允许使用无证书的不安全SSL进行连接和传输SSL其他。

' u9 W( \" z* D7 t- N7 [

--ciphers (SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”;--engine 设置一个OpenSSL加密引擎用于加密操作;使用“curl --engine list”查看支持的加密引擎列表;

& r1 e1 y0 H! x B. J

--random-file(SSL)指定包含随机数据的文件路径名;数据是用来为SSL连接产生随机种子为;--egd-file (SSL)为随机种子生成器EGD(Entropy Gathering Daemon socket)指定的路径名;

2 g) i# {/ [% i, S5 T6 K

-1/--tlsv1--tlsv1.0--tlsv1.1--tlsv1.2-2/--sslv2-3/--sslv3(SSL)使用TLS版本2与远程服务器通讯;(SSL)使用TLS 1.0版本与远程服务器通讯;(SSL)使用TLS 1.1版本与远程服务器通讯;(SSL)使用TLS 1.2版本与远程服务器通讯;(SSL)使用SSL版本2与远程服务器通讯;(SSL)使用SSL版本3与远程服务器通讯;

' L. B( C3 I& P6 R- q/ ~% ?/ ~7 J

私钥公钥--key (SSL/SSH)指定一个私钥文件名;为指定时自动尝试使用下面文件:“~/.ssh/id_rsa”、“~/.ssh/id_dsa”、“./id_rsa”、 “./id_dsa”;

" ?4 u0 ~2 \0 G( m: T5 |; e$ ]# ]4 B6 N& ~

--key-type (SSL)指定私钥文件类型,支持:DER、PEM、ENG,默认是PEM;--pass (SSL/SSH)指定私钥文件的密码;--pubkey

; I* s3 O9 ?0 H+ H

(SSH)使用指定文件提供的您公钥;FTP-P--ftp-port (FTP)FTP主动模式时,设置一个地址等待服务器的连接,如:网卡:eth1IP:8.8.8.8主机名:http://aiezu.com

* o" _1 ^( x( ~6 ~( Y6 S' M2 v9 U

可以加端口号:eth1:20000-21000;--crlf(FTP)上传时将换行符(LF)转换为回车换行(CRLF);--ftp-account [data](FTP)ftp帐号信息;--ftp-method [method]

; {0 A. n; n( M" x& @) t: x

(FTP)可选值:multicwd/nocwd/singlecwd;--ftp-pasv(FTP)使用使用PASV(被动)/EPSV模式;--ftp-skip-pasv-ip(FTP)使用PASV的时,跳过指定IP;

$ T8 L* H8 T2 m$ k4 Q% \, g

--ftp-create-dirs(FTP)上传时自动创建远程目录;-l--list-only(FTP)列出ftp文件列表;-B--use-ascii(FTP/LDAP)使用Ascii传输模式,用于FTP、LDAP;在ftp中相当与使用了“type=A;”模式。

8 o4 i1 G# y( P# v/ J z

--disable-epsv(FTP)告诉curl在PASV(被动模式)时不要使用EPSV;--disable-eprt(FTP)告诉curl在主动模式时禁用EPRT和LPRT;限速--limit-rate

; R% A- M+ e% G4 N5 j: f8 G. X( b1 F

限制curl使用的最大带宽;如果未指定单位,默认单位为“bytes/秒”,你也可以指定单位为“K”、“M”、“G”等单位,如:“--limit-rate 1m”为限制最大使用带宽为“1m字节/秒”;-y--speed-time

. K: @0 \6 Y4 n9 {# E' A

If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will be 1 unless set with -Y.This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the --connect-timeout option.

. E1 {& a8 m' k C

-Y--speed-limit If a download is slower than this given speed (in bytes per second) for speed-time seconds it gets aborted. speed-time is set with -y and is 30 if not set.

( M, |6 X: Z, Y3 ]9 A% ?

其他选项-0/--http1.0(HTTP) 强制curl使用HTTP 1.0而不是使用默认的HTTP 1.1;--interface 使用指定的网卡接口访问;curl --interface eth0

& S3 q9 w$ U7 L5 k, Y- l( a8 w+ P

http://aiezu.comcurl --interface 10.0.0.101 http://aiezu.com-X --request (HTTP)指定与服务器通信使用的请求方法,如:GET、PUT、POST、DELETE等,默认GET;

4 O% |9 u/ f! Y5 u+ W7 {1 e

--keepalive-time 设置keepalive时间--no-keepalive关闭keepalive功能;--no-buffer禁用对输出流缓冲;--buffer启用输出流缓冲;

8 c4 i0 ~0 z: y! c" g/ ~

-L--location(HTTP/HTTPS)追随http响应头“Location:”定向到跳转后的页面;(在http响应码为3XX时使用,如301跳转、302跳转)--location-trusted

: L4 }' `) p2 P S

(HTTP/HTTPS)同“--location”,但跳转后会发送跳转前的用户名和密码;--compressed(HTTP)请求对返回内容使用压缩算法进行压缩;curl支持对gzip压缩进行解压;--connect-timeout

6 [; n4 |* q6 t% C% F& x0 G

指定最大连接超时,单位“秒”;-m seconds--max-time seconds限制整个curl操作的最长时间,单位为秒;-s--silent安静模式不要显示进度表或错误消息;-#--progress-bar。

+ g/ _, ~7 w5 @4 x) h# m* J, y) X

显示进度条;错误选项-f--fail(HTTP)连接失败时(400以上错误)不返回默认错误页面,而是返回一个curl错误码“22”;--retry --retry-delay --retry-max-time

. R5 \/ I3 [6 @: b6 Z& c; y3 K4 s

失败重试次数;重试间隔时间;最大重试时间;-S--show-error安静模式下显示错误信息;--stderr 错误信息保存文件;输出-o file--output file将返回内容输出到文件。

& a4 \6 T9 V" x7 H

如果是用过通配符获取多个url,可以使用“#”后跟“数字序号”,curl会自动将它替换对应的关键词,如:  curl "http://aiezu.com/{a,b}.txt" -o "#1.txt";  将保存为:“a.txt”,“b.txt”;  curl "

! M" x- C, [9 A

http://aiezu.com/{a,b}_[1-3].txt" -o "#1#2.txt";  将保存为:a1.txt、a2.txt、a3.txt、b1.txt、b2.txt、b3.txt  如果要根据规则创建保存目录,参考:“--create-dirs”指定“-”将定向到标准输出“如控制台”;

@( {3 {1 x$ D% J" D" i

-O--remote-name将返回内容输出到当前目录下,和url中文件名相同的文件中(不含目录);--create-dirs与“-o”参数配合使用,创建必要的本地目录层次结构-w--write-out format

U! {( x3 p5 P3 q5 ^

操作完成后在返回信息尾部追加指定的内容;要追加的内容可以是一个字符串“string”、从文件中获取“@filename”、从标准输入中获取“@-”格式参数中可以用%{variable_name} 方式使用响应信息的相关变量,如:%{content_type}、%{http_code}、%{local_ip}...,更多变量参考“man curl”获取;格式参数可以使用“\n”、“\r”、“\t”等转义字符;

: O8 V$ [9 l( q6 ?( j

调试--trace 转储所有传入和传出的数据到文件,包括描述信息;使用“-”作为文件名将输出发送到标准输出--trace-ascii file转储所有传入和传出的数据到文件,包括描述信息,只转储ASCII部分,更容易阅读;使用“-”作为文件名将输出发送到标准输出。

! _3 N! X& a' b3 u X) S7 D* U

这个选项会覆盖之前使用的-v、 --verbose、 --trace-ascii选项;--trace-time转储文件中添加时间信息;-K--config 从配置文件中读取参数,参考:

: t, O% H) F( w6 P

http://curl.haxx.se/docs/-v--verbose显示更详细的信息,调试时使用;帮助-M--manual显示完整的帮助手册;-h--helplinux curl用法帮助;curl -h 的完整参数解释:

8 E- p) U* |- |7 I

-a/--append上传文件时,附加到目标文件--anyauth可以使用“任何”身份验证方法--basic使用HTTP基本验证-B/--use-ascii使用ASCII文本传输-d/--data

/ H9 X. Z: o/ N6 [3 {: x

HTTP POST方式传送数据--data-ascii 以ascii的方式post数据--data-binary 以二进制的方式post数据--negotiate使用HTTP身份验证

2 R9 Z+ _7 T5 Z/ b

--digest使用数字身份验证--disable-eprt禁止使用EPRT或LPRT--disable-epsv禁止使用EPSV--egd-file 为随机数据(SSL)设置EGD socket路径

7 H6 L& f+ F/ n& |' p" J( N+ \) y

--tcp-nodelay使用TCP_NODELAY选项-E/--cert 客户端证书文件和密码 (SSL)--cert-type 证书文件类型 (DER/PEM/ENG) (SSL)

: u# y" v+ D7 p" E$ K* |0 F

--key 私钥文件名 (SSL)--key-type 私钥文件类型 (DER/PEM/ENG) (SSL)--pass 私钥密码 (SSL)--engine

3 i# r, s# k" r' W

加密引擎使用 (SSL). "--engine list" for list--cacert CA证书 (SSL)--capath CA目 (made using c_rehash) to verify peer against (SSL)

5 F: `% [) Q: c' p) k4 R- x

--ciphers SSL密码--compressed要求返回是压缩的形势 (using deflate or gzip)--connect-timeout 设置最大请求时间

7 Z! S3 t# D/ M, z( Y% I5 u( C

--create-dirs建立本地目录的目录层次结构--crlf上传是把LF转变成CRLF--ftp-create-dirs如果远程目录不存在,创建远程目录--ftp-method [multicwd/nocwd/singlecwd]

! w1 n0 z# Y0 p! t

控制CWD的使用--ftp-pasv使用 PASV/EPSV 代替端口--ftp-skip-pasv-ip使用PASV的时候,忽略该IP地址--ftp-ssl尝试用 SSL/TLS 来进行ftp数据传输

8 S% f0 u3 `# o2 d; H# Q

--ftp-ssl-reqd要求用 SSL/TLS 来进行ftp数据传输-F/--form 模拟http表单提交数据-form-string 模拟http表单提交数据

* f* h& q6 `+ v9 a9 {& D; O/ @5 v

-g/--globoff禁用网址序列和范围使用{}和[]-G/--get以get的方式来发送数据-h/--help帮助-H/--header 自定义头信息传递给服务器--ignore-content-length

7 x, O) N0 j* B: ?& p' N

忽略的HTTP头信息的长度-i/--include输出时包括protocol头信息-I/--head只显示文档信息-j/--junk-session-cookies读取文件时忽略session cookie

8 |1 ?8 S7 T0 s* ?4 T

--interface 使用指定网络接口/地址--krb4 使用指定安全级别的krb4-k/--insecure允许不使用证书到SSL站点-K/--config指定的配置文件读取

# z+ p: e) t" F1 F* { y

-l/--list-only列出ftp目录下的文件名称--limit-rate 设置传输速度--local-port强制使用本地端口号-m/--max-time

% A, z& ^% y$ O6 W- g! n

设置最大传输时间--max-redirs 设置最大读取的目录数--max-filesize 设置最大下载的文件总量-M/--manual显示全手动-n/--netrc从netrc文件中读取用户名和密码

: m3 {, R+ ~% }" i7 S& s

--netrc-optional使用 .netrc 或者 URL来覆盖-n--ntlm使用 HTTP NTLM 身份验证-N/--no-buffer禁用缓冲输出-p/--proxytunnel使用HTTP代理

: W- \0 B6 ^" Z! Z& \ } N

--proxy-anyauth选择任一代理身份验证方法--proxy-basic在代理上使用基本身份验证--proxy-digest在代理上使用数字身份验证--proxy-ntlm在代理上使用ntlm身份验证

: g3 ]# T6 S" O- m( D

-P/--ftp-port 使用端口地址,而不是使用PASV-Q/--quote 文件传输前,发送命令到服务器--range-file读取(SSL)的随机文件-R/--remote-time

1 T, G k# J6 B$ q8 [2 [

在本地生成文件时,保留远程文件时间--retry 传输出现问题时,重试的次数--retry-delay 传输出现问题时,设置重试间隔时间--retry-max-time

3 W0 t) y( R- Z5 k3 c3 x

传输出现问题时,设置最大重试时间-S/--show-error显示错误--socks4 用socks4代理给定主机和端口--socks5 用socks5代理给定主机和端口

2 l t) W. |# {- d; F% k( {% Q

-t/--telnet-option Telnet选项设置--trace 对指定文件进行debug--trace-ascii Like --跟踪但没有hex输出

3 D7 U' U6 R: Z6 b7 L# _8 W3 h

--trace-time跟踪/详细输出时,添加时间戳--url Spet URL to work with-U/--proxy-user 设置代理用户名和密码

1 V6 |4 d0 B" ~8 p& v, k& V

-V/--version显示版本信息-X/--request 指定什么命令-y/--speed-time放弃限速所要的时间默认为30-Y/--speed-limit停止传输速度的限制,速度时间秒。

; o6 L" k- N" ~+ l# c

-z/--time-cond传送时间设置-0/--http1.0使用HTTP 1.0-1/--tlsv1使用TLSv1(SSL)-2/--sslv2使用SSLv2的(SSL)-3/--sslv3使用的SSLv3(SSL)

7 u8 t8 d; c6 I9 u& R2 C' {1 d

--3p-quotelike -Q for the source URL for 3rd party transfer--3p-url使用url,进行第三方传送--3p-user使用用户名和密码,进行第三方传送

2 ?, L/ f; S! j! e

-4/--ipv4使用IP4-6/--ipv6使用IP6三、常见用法1、下载(option:-o或者option:-O)1.1、下载页面:curl -o dodo1.jpg http:http://www.

, r0 `( {/ E8 ?: U6 t" ?

linux.com/dodo1.JPG#要注意-O这里后面的url要具体到某个文件,不然抓不下来curl -O http://www.linux.com/dodo1.JPG1.2:循环下载有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样。

* n; s! T6 x/ \) o7 y

这样就会把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来curl -O http://www.linux.com/dodo[1-5].JPG1.3:下载重命名在hello/dodo1.JPG的文件下载下来就会变成hello_dodo1.JPG,其他文件依此类推,从而有效的避免了文件被覆盖

4 A O e5 o' @0 S

curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG由于下载的hello与bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。

; z' \8 k: F' C' Q. Y9 f) H' `

因此第二次下载的会把第一次下载的覆盖,这样就需要对文件进行重命名curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG1.4:分块下载(option:-r)

1 e. w3 Z2 g5 ]6 K

curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPGcurl -r 100-200 -o dodo1_part2.JPG http://www.

% D" {/ n& s# s0 h% s! h

linux.com/dodo1.JPGcurl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPGcat dodo1_part* > dodo1.JPG #这样就可以查看dodo1.JPG的内容了

, P1 U; ~$ J D7 c% z& B l% k+ @6 [

1.5:通过ftp下载文件(option:-u)curl可以通过ftp下载文件,curl提供两种从ftp中下载的语法curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG

1 U" [$ T( m& n+ U1 C' ^

curl -O ftp://用户名:密码@http://www.linux.com/dodo1.JPG1.6:下载,显示进度条(option:-#)或不显示进度条(option:-s)curl -# -O

F: h, M* Z$ V1 q5 k& G

http://www.linux.com/dodo1.JPGcurl -s -O http://www.linux.com/dodo1.JPG1.7、下载,断点续传(-C )断点续转,从文件头的指定位置开始继续下载/上传;offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;

. M: j/ M; |2 g

curl -# -o centos6.8.iso -C - http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso

' V7 z0 l. e+ W

curl -C -O http://www.linux.com/dodo1.JPG2、上传文件(option:-T)curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/

0 G$ W$ ?! ~2 k

3、伪造来源页面|伪造referer|盗链 (option:-e)很多服务器会检查http访问的referer从而来控制访问比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了。

( ?+ v* {! N6 V; Z4 f$ T' i6 w2 z0 J

#这样就会让服务器其以为你是从http://www.linux.com点击某个链接过来的curl -e "http://www.linux.com" http://mail.linux.com#告诉爱E族,我是从百度来的

* y5 @/ m& i k5 M/ \4 w. Y

curl -e http://baidu.comhttp://aiezu.com4、伪造代理设备(模仿浏览器)有些网站需要使用特定的浏览器去访问他们,有些还需要使用某些特定的版本curl内置option:-A可以让我们指定浏览器去访问网站。

# K3 Z8 [$ r+ q3 M r/ Q! G

curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com#告诉爱E族,我是GOOGLE爬虫蜘蛛(其实我是curl命令)

/ l$ R2 _2 b2 R2 o8 `; }5 f2 r% N

curl -A " Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" http://aiezu.com#告诉爱E族,我用的是微信内置浏览器

+ Q* w0 \) ?# d# a! A

curl -A "Mozilla/5.0 AppleWebKit/600 Mobile MicroMessenger/6.0" http://aiezu.com5、设置http请求5.1、设置http请求头(或option:-H或option:--head)

; a. d, \3 H+ G& v3 {6 F2 t, @. q) t

curl -H "Cache-Control:no-cache" http://aiezu.com5.2、指定proxy服务器以及其端口(option::-x)#很多时候上网需要用到代理服务器(比如是使用代理服务器上网或者因为使用curl别人网站而被别人屏蔽IP地址的时候),幸运的是curl通过使用内置option:-x来支持设置代理

2 j# d( u% w5 z0 r

curl -x 192.168.100.100:1080 http://www.linux.com6、http响应头6.1、查看http响应头(option:-I)# 看看本站的http头是怎么样的curl -I

9 Q* c( ^0 {& K, J

http://aiezu.com输出:HTTP/1.1 200 OKDate: Fri, 25 Nov 2016 16:45:49 GMTServer: ApacheSet-Cookie: rox__Session=abdrt8vesprhnpc3f63p1df7j4; path=/

3 z" V! y4 _8 P4 `; ?3 R7 H3 A8 f

Expires: Thu, 19 Nov 1981 08:52:00 GMTCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

+ f0 ^5 q& F$ M8 x* i

Pragma: no-cacheVary: Accept-EncodingContent-Type: text/html; charset=utf-86.2、保存http的response里面的header信息(option:-D)

& e7 k& x- P- T" @$ v! V

curl -D cookied.txt http://www.linux.com执行后cookie信息就被存到了cookied.txt里面了注意:-c(小写)产生的cookie和-D里面的cookie是不一样的。

* g# A; D- J6 S' k* W6 W0 \" p; M3 ~! e

7、发送表单数据curl -F "pic=@logo.png" -F "site=aiezu" http://aiezu.com/8、cookie8.1、发送cookie(option:-b)#有些网站是使用cookie来记录session信息。

; W. X- \# [1 O- a9 I1 k

对于chrome这样的浏览器,可以轻易处理cookie信息,但在curl中只要增加相关参数也是可以很容易的处理cookiecurl -b "domain=http://aiezu.com" http://

5 G+ i/ l+ G* e0 I2 ~" m s

aiezu.com#很多网站都是通过监视你的cookie信息来判断你是否按规矩访问他们的网站的,因此我们需要使用保存的cookie信息内置option: -bcurl -b cookiec.txt http://www.

1 q" P2 i' i) `' i

linux.com8.2、保存http的response里面的cookie信息(option:-c)执行后http的response里面的cookie信息就被存到了cookiec.txt里面了curl -c cookiec.txt

+ w; ~, o8 X" [5 G3 v

http://www.linux.com9、测试一个网址9.1、测试一个网址是否可达curl -v http://www.linux.com9.2、测试网页返回值(option:-w [format])

* t* j6 w* M9 a P

curl -o /dev/null -s -w %{http_code} http://www.linux.com10、保存访问的网页(>>)2.1:使用linux的重定向功能保存curl http://www.

& }, T, o! M3 W4 f( x

linux.com >> linux.html11、请求方式curl -i -v -H -X POST -d http:http://www.test.com/a/b其中,-X POST -d, -X GET -d, -X PUT -d 分别等价于-F, -G -d, -P

$ Y& f9 e; B. f9 R5 v) Y

以post请求为例:11.1、 -X POST -d(11.1.1)、POST application/x-www-form-urlencodedapplication/x-www-form-urlencoded是默认的

8 \% _5 V/ X7 j7 o6 ~; H& o6 b

curl -X POST -d "param1=value1¶m2=value2" http://localhost:3000/data等价于curl -H "Content-Type:application/x-www-form-urlencoded" -X POST -d "param1=value1¶m2=value2" http://localhost:3000/data

2 z& P. D" d a9 P

使用数据文件curl -X POST -d "@data.txt" http://localhost:3000/data其中data.txt内容如下:param1=value1¶m2=value2(11.1.2)、POST application/json

% V4 Q; u. Q2 {9 C/ }8 y* K* [! _* j4 V

curl -H "Content-Type:application/json" -X POST -d {"key1":"value1","key2":"value2"} http://localhost:3000/data

/ Q3 s9 M- y8 `) F" [9 X

使用数据文件的话:curl -X POST -d "@data.json" http://localhost:3000/data其中data.json内容如下:{"key1":"value1","key2":"value2"}

# q& `, R5 P1 q. U

再举个例子:curl -H "Content-type:application/json" -X POST -d "{\"app_key\":\"$appKey\",\"time_stamp\":\"$time\"}"

% |% l; d& U5 ~6 \1 Y9 v

http://www.test.com.cn/a/b11.2、-Fcurl -v -H "token: 222" -F "file=@/Users/fungleo/Downloads/401.png" localhost:8000/api/v1/upimg

4 P8 E% V1 q1 ]6 J6 u

curl -f http://www.linux.com/error11.3、其它举例(11.3.1)、curl -X POST "http://www.test.com/e/f" -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" \

1 }7 W5 H a9 F( r1 D# W7 A! d

-d "a=b" \-d "c=d" \-d "e=f" \-d "g=h"(11.3.2)、错误:curl -i -G -d "a=b#1&c=d" http://www.test.com/e/f正确:要把参数值是特殊符号的用urlencode转换过来

$ D7 c* Y. z- Q2 D f# S8 s8 q& U

curl -i -G -d "a=b%231&c=d" http://www.test.com/e/f12、调试curl -v可以显示一次http通信的整个过程,包括端口连接和http request头信息。

- x+ b; i2 t: e* |/ u2 L( [

如果觉得还不够,那么下面的命令可以查看更详细的通信过程:curl --trace output.txt http://www.baidu.com 或者 curl --trace-ascii output.txt

. b. j( h: z- a' }& R( F- v

http://www.baidu.com运行后,请打开output.txt文件查看curl --trace output.txt http://www.baidu.comcurl --trace-ascii output2.txt 。

- ~& q' H7 U7 L% E5 }: o

http://www.baidu.comcurl --trace output3.txt --trace-time http://www.baidu.comcurl --trace-ascii output4.txt --trace-time

J6 C, K1 c. y( r3 I

http://www.baidu.com举例:有需求每5分钟请求一次http://www.test.com/a/b生成一个日志文件希望一月的日志(正确的和错误的)能写入一个日志文件day=`date +%F`。

$ C; h x( u- v P

logfile=/var/logs/www.test.com_`date +%Y%m`.log/usr/bin/echo -e "\n\n[${day}] Start request \n " >> ${logfile}

$ H. T R1 C3 w$ c$ ~, Q7 o

/bin/curl -v "http://www.test.com/a/b" -d "ccccc" 1>> ${logfile} 2>> ${logfile} --trace-time/usr/bin/echo -e "\n\n[${day}] End request\n" >> ${logfile}

# M( n: j& L8 V5 \- Y1 a

13、显示抓取错误curl -f http://www.linux.com/error参考链接 curl命令_ths512的博客-CSDN博客_curl命令

; o# r! }" e9 Z- l ! j. H% x W* D / Z# l9 B7 x- b! W3 W# b1 j$ V1 \# p6 R9 W6 P , @. j w# P3 ]& W( M _

暂时无法加载帖子列表

回复

使用道具 举报

amy328 发表于 2026-10-01 07:56:41 | 显示全部楼层
说得很实在,没有夸大其词,这种真实分享太难得了
回复

使用道具 举报

西安.NET技术 发表于 2026-10-08 19:39:25 | 显示全部楼层
楼主辛苦了,整理这么多内容,必须点赞收藏
回复

使用道具 举报

许绿彬 发表于 2026-10-15 22:05:06 | 显示全部楼层
楼主太厉害了,整理得这么详细,必须支持
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-11-1 09:46 , Processed in 0.048135 second(s), 25 queries , Gzip On.

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

    Powered by Discuz! X3.5

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