|
; |$ v( G' ]- ~
http请求第一部分:动词 +路径+http协议/版本号,其中动词包括 GET POST PUT PATCH DELETE HEAD OPTIONS 等路径包括查询参数如?username=xxxxx但不包括锚点如#1111
" u+ \% _0 K' V: f 如果不写路径,则默认为/例:GET/ HTTP/1.1POST/ HTTP/1.1第二部分:一堆KEY和一堆value例:Host:http://cxcccc.com9 c `+ q2 c: c: G: U
Connection: keep-alive6 ]6 ~, T0 i2 h8 t, M$ E, h
Upgrade-Insecure-Requests: 1
2 |) r8 p; |& @/ k; {5 d! U User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36
* e0 E. \5 Z5 Y" E9 g) k; _ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 ~3 g- V, n9 g. l' @
Referer: http://cxcccc.com# |& F+ T% X, K6 n# g2 c
Accept-Encoding: gzip, deflate, br3 L; f o: Q7 a
Accept-Language: zh-CN,zh;q=0.9
+ ?6 P% I- A- S9 K% ~8 B% c 注意:如果第四部分有数据,则第二部分需要标注他的格式,如:Content-Type:application/x-www-form-urlencoded第三部分:回车第四部分要上传的数据,可以为空(比如一些get的时候) / N" @. H; o: | |4 Y. [( `
例:当我 curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "http://www.baidu.com"时,第四部分为1234567890查看http请求内容:
2 F' I/ V. ?& D. e/ ?* S/ } chrome中按F12呼出开发者工具,在network中在request里找个请求,找到request headers,点击viewsource,即可看到请求内容。 + ~) f/ M5 T* T3 Y( O6 M
第四部分找到payload或者formdata即可。
0 q4 Z, L l; y# P4 e- y http响应第一部分:协议/版本号 状态码 解释如:http/1.1 200 ok其中状态码需要背下来:1xx 不常用2xx 成功了3xx 不接受你的请求4xx 客户端有问题(地址错了之类的)5xx 服务端有问题 9 q9 [1 ]7 T& ~$ E; x
解释可以自己定义,没啥用第二部分:一堆KEY和一堆VALUE(包括Content-Type:啥啥啥)第三部分:回车第四部分:返回的内容查看http响应内容:chrome中按F12呼出开发者工具,在network中在request里找个请求,找到response headers,点击viewsource,即可看到响应内容。
! J& o# ^9 X1 y# o 第四部分找到Preview或者Response即可。 ) J' {! l0 Z5 q! \& t
如何使用curl命令:最简单1:用curl查看html:curl http://www.baidu.com最简单2:使用linux的重定向功能保存:curl http://www.baidu.com >> baidu.html
6 U. E) _( A7 S9 i9 f 常用参数:-A/--user-agent 设置用户代理发送给服务器+ z( ]0 x. r6 w0 w9 \
-b/--cookie cookie字符串或文件读取位置& h. w S l* U7 M- R
-c/--cookie-jar 操作结束后把cookie写入到这个文件中5 Q8 d' G# r0 j5 i9 v" q5 G* o
-C/--continue-at 断点续转0 M* G& s- f# `5 Q; v- s. [
-D/--dump-header 把header信息写入到该文件中
1 _9 i+ n8 G+ w( b -e/--referer 来源网址
& `- J1 q% {* a3 ~: G -f/--fail 连接失败时不显示http错误3 Q+ l/ X6 ?& B
-o/--output 把输出写到该文件中
8 g N- U! U O# a -O/--remote-name 把输出写到该文件中,保留远程文件的文件名
. k, r. j2 O! u7 W7 @+ @# f -r/--range 检索来自HTTP/1.1或FTP服务器字节范围
x! ?5 E1 _, R -s/--silent 静音模式。 ( C n6 p+ C: t n6 |
不输出任何东西) A& ~* z5 {. n2 [ v7 d( u+ Y
-T/--upload-file 上传文件
; t, f& d* `: h) @* U -u/--user 设置服务器的用户和密码$ g8 D6 p( Y z# \ g4 ^
-w/--write-out [format] 什么输出完成后
* A8 q( E) }0 T- A8 X -x/--proxy 在给定的端口上使用HTTP代理3 D4 |) m7 @, p+ J/ _9 o
-#/--progress-bar 进度条显示当前的传送状态4 k6 i1 `4 k) j5 B
" D* I2 e# I/ l3 S 其他参数:- a9 h( j6 v8 t! |& C* O0 n' f* J
-a/--append 上传文件时,附加到目标文件
/ q @5 u- R6 O* w2 v, l0 `- v --anyauth 可以使用“任何”身份验证方法
1 ?7 a( z7 y0 T. N. _ --basic 使用HTTP基本验证
& A( G& G% E7 p- i -B/--use-ascii 使用ASCII文本传输
3 f+ N+ z2 Y% B5 O1 p& f# k0 C7 p -d/--data HTTP POST方式传送数据# ~4 U$ |- Z m# T3 Z! [' N8 J' K
--data-ascii 以ascii的方式post数据# n7 V5 n) ^1 |* [
--data-binary 以二进制的方式post数据
% d6 ^& [8 K- _3 C3 A; z --negotiate 使用HTTP身份验证2 ~+ g8 [ A# M' W
--digest 使用数字身份验证
" |% E+ m% C# d N+ m --disable-eprt 禁止使用EPRT或LPRT, y2 d( P! \) ^
--disable-epsv 禁止使用EPSV
' X8 b2 c2 r+ Q1 a& r2 L& e --egd-file 为随机数据(SSL)设置EGD socket路径$ K! j4 s0 e+ F4 M. q4 N5 T! g
--tcp-nodelay 使用TCP_NODELAY选项
" G% I0 K- ~& |: x -E/--cert 客户端证书文件和密码 (SSL)0 v% _8 D" b$ n k4 P+ Q
--cert-type 证书文件类型 (DER/PEM/ENG) (SSL)
8 G" t0 m/ y1 D& w --key 私钥文件名 (SSL)
: w/ F) n6 o. |! H4 g --key-type 私钥文件类型 (DER/PEM/ENG) (SSL)
+ s8 Z, d$ Q7 L0 E --pass 私钥密码 (SSL)
+ Q2 p3 W& k! v" M --engine 加密引擎使用 (SSL). "--engine list" for list( D8 n8 ~( r1 Y" ^. K; f6 q* y, y5 E
--cacert CA证书 (SSL)9 W) A1 ^2 @: d* ]* [8 d) a) t7 O
--capath CA目 (made using c_rehash) to verify peer against (SSL)5 W) J* m* M) y) j- G
--ciphers SSL密码
8 Z1 b1 N$ ^3 C0 L5 a* Z: }# V --compressed 要求返回是压缩的形势 (using deflate or gzip)) i& a; u/ {" D% E4 h* n$ b( Q- B
--connect-timeout 设置最大请求时间
: b% X9 n) @; Y8 T: A5 e --create-dirs 建立本地目录的目录层次结构
+ P; a' y- g( v' J4 ] --crlf 上传是把LF转变成CRLF
$ A5 O/ I2 O) h8 v --ftp-create-dirs 如果远程目录不存在,创建远程目录
0 D7 ?% E# y& R- j --ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
( o+ F! I& ?: W --ftp-pasv 使用 PASV/EPSV 代替端口
# q- B) ~/ e- \' [ --ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址
% {& ~' O1 v7 k( K7 z8 T --ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输/ c3 D7 Z y ^* w7 z( ` Z
--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输1 Q$ O/ L' y; b8 Q8 t
-F/--form 模拟http表单提交数据
6 ?3 Y; _ y# l. g& I t- B! D -form-string 模拟http表单提交数据
% ]1 P4 F0 p+ F$ } k* F3 n -g/--globoff 禁用网址序列和范围使用{}和[]: P1 t+ j6 W7 V# G* B+ R% \# w( K! K
-G/--get 以get的方式来发送数据1 N4 J( i( s) ^6 R i( a
-h/--help 帮助
s2 Q% [6 h- e. f' M, @. O: ? -H/--header 自定义头信息传递给服务器
5 Q' i, D! n. U. l/ o --ignore-content-length 忽略的HTTP头信息的长度
7 l) ]2 e1 Z3 m -i/--include 输出时包括protocol头信息
! w2 E. v3 ?) z1 T8 A8 Q -I/--head 只显示文档信息
* Q, Z3 G; ~8 d9 ]- L( \ -j/--junk-session-cookies 读取文件时忽略session cookie
I1 W8 j3 |+ b" q! \ --interface 使用指定网络接口/地址
0 X$ }9 S2 Q7 N" W" z --krb4 使用指定安全级别的krb47 D' d$ W- ^# h: m- w
-k/--insecure 允许不使用证书到SSL站点4 W0 ], N! ], D' Q# ^: @
-K/--config 指定的配置文件读取
$ ^# j- G0 l$ t -l/--list-only 列出ftp目录下的文件名称' T( \, M* T Q
--limit-rate 设置传输速度8 U2 `) v8 { c) b. y
--local-port 强制使用本地端口号- P( y4 O# O1 Q; Y2 h2 ^2 ~/ Q
-m/--max-time 设置最大传输时间: n8 P5 z& ]5 Q- B% Z* N
--max-redirs 设置最大读取的目录数
9 c j, u3 B8 E7 M --max-filesize 设置最大下载的文件总量
2 k4 O( U' R# l7 p2 P$ s) n' T -M/--manual 显示全手动
! u, P# H0 q$ N$ ]/ g2 d. Y -n/--netrc 从netrc文件中读取用户名和密码
! c- b9 `0 q- t4 p& V --netrc-optional 使用 .netrc 或者 URL来覆盖-n
) K" ^" C: g4 A+ c --ntlm 使用 HTTP NTLM 身份验证
4 l+ ?& R% y" `3 S$ x -N/--no-buffer 禁用缓冲输出; b9 G4 v2 B/ u3 Z6 m
-p/--proxytunnel 使用HTTP代理: O# x/ ]& `' q9 g, ?; u
--proxy-anyauth 选择任一代理身份验证方法
+ ^ ]' u' f/ b+ `/ A4 w+ t --proxy-basic 在代理上使用基本身份验证 _, `) w3 z9 T% Q& }6 p
--proxy-digest 在代理上使用数字身份验证
: f+ h( G' O) p' H --proxy-ntlm 在代理上使用ntlm身份验证
) j# n2 [5 H: T -P/--ftp-port 使用端口地址,而不是使用PASV+ V/ O3 m4 X. y% _3 F$ }
-Q/--quote 文件传输前,发送命令到服务器
" X5 k$ K% x& M7 D --range-file 读取(SSL)的随机文件
; G. x% u8 s4 R5 G0 N H6 M -R/--remote-time 在本地生成文件时,保留远程文件时间 J# I& {/ k5 A% a% G% \9 u5 a
--retry 传输出现问题时,重试的次数
7 ]& i" e4 f& { --retry-delay 传输出现问题时,设置重试间隔时间- X/ d1 _4 z7 G+ }
--retry-max-time 传输出现问题时,设置最大重试时间
2 c" i% T5 h {/ S/ p" h! } -S/--show-error 显示错误
% z, O* f- ?4 U8 t8 p --socks4 用socks4代理给定主机和端口
: a& a/ J! c8 R$ y* d: i# \6 V --socks5 用socks5代理给定主机和端口1 E% T; y) K( q/ d
-t/--telnet-option Telnet选项设置
+ T4 v) @; p5 e# N5 o d/ p --trace 对指定文件进行debug; z# {; K$ `: [) C2 R
--trace-ascii Like --跟踪但没有hex输出9 V, N0 G' v: X3 u# w7 c6 _: {" g
--trace-time 跟踪/详细输出时,添加时间戳
3 D0 v. s% P. {; ?: K* I! C --url Spet URL to work with+ W8 R$ t& k+ b/ c! j
-U/--proxy-user 设置代理用户名和密码& k6 ]# k; Y7 Y0 r3 d7 t& ]+ h& _
-V/--version 显示版本信息
0 O" r2 ^* y' }& H! D -X/--request 指定什么命令" ]+ t0 T7 W7 n g- e3 |
-y/--speed-time 放弃限速所要的时间。
( M5 q4 C1 N8 X3 e 默认为30" D8 ~$ ^) Y! g6 e
-Y/--speed-limit 停止传输速度的限制,速度时间秒/ [8 K9 i1 i" _8 v0 I5 d
-z/--time-cond 传送时间设置
8 x) d) m) Q, T; n$ _! h/ z ?- k J -0/--http1.0 使用HTTP 1.0
# e' _/ _; ~, K" Y2 p0 ? -1/--tlsv1 使用TLSv1(SSL)
$ j8 N( k6 J! m/ k+ G* W5 o. v -2/--sslv2 使用SSLv2的(SSL)8 M4 Z; U7 v* l6 Y& t7 ^- E
-3/--sslv3 使用的SSLv3(SSL)8 ? O* { u1 S0 z/ A4 `2 O# x5 ~
--3p-quote like -Q for the source URL for 3rd party transfer
! @" O+ s# c6 n* ?; L& F --3p-url 使用url,进行第三方传送1 {0 Q1 E9 H3 d7 L2 @
--3p-user 使用用户名和密码,进行第三方传送 m/ f p: ^, E2 Q2 E I; Y7 E7 R
-4/--ipv4 使用IP4
4 r. T/ W9 M; L) W& o -6/--ipv6 使用IP6。 8 ]6 t( w! a; C( N& C3 b
7 Z" h: s( y, f4 x" q
k- R- p' K! L# Z
& x. S6 h) r+ n' R% P! E6 e3 a
- N! }# w: n# ~% }5 l% W8 \7 N% @8 ] |