|
' y; L/ l. e5 O/ c# W$ l0 B$ `. Y
http请求第一部分:动词 +路径+http协议/版本号,其中动词包括 GET POST PUT PATCH DELETE HEAD OPTIONS 等路径包括查询参数如?username=xxxxx但不包括锚点如#1111 . X3 ~% o- p. ^; ~) G0 }
如果不写路径,则默认为/例:GET/ HTTP/1.1POST/ HTTP/1.1第二部分:一堆KEY和一堆value例:Host:http://cxcccc.com
! }( T+ ~/ b A1 W- W* `8 m P Connection: keep-alive+ T- ]" q6 J- M+ R- x* D
Upgrade-Insecure-Requests: 1
4 G6 m# w v+ t User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.361 K3 G5 }( |; f8 E9 g0 D+ E4 M
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
9 L9 l" F! u/ n7 v, V Referer: http://cxcccc.com* E. E. ^' U4 k2 e
Accept-Encoding: gzip, deflate, br" }6 n: y6 V5 ~4 O
Accept-Language: zh-CN,zh;q=0.9
0 d3 T; ]: q' s2 C" l8 u8 C 注意:如果第四部分有数据,则第二部分需要标注他的格式,如:Content-Type:application/x-www-form-urlencoded第三部分:回车第四部分要上传的数据,可以为空(比如一些get的时候) ; i+ n% \ F4 l2 w+ q# @. ^
例:当我 curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "http://www.baidu.com"时,第四部分为1234567890查看http请求内容:
; G' G, |: D# X* S% N chrome中按F12呼出开发者工具,在network中在request里找个请求,找到request headers,点击viewsource,即可看到请求内容。
* S; P4 y$ v0 ~8 B 第四部分找到payload或者formdata即可。
+ y2 ]; h" T7 D) |0 F http响应第一部分:协议/版本号 状态码 解释如:http/1.1 200 ok其中状态码需要背下来:1xx 不常用2xx 成功了3xx 不接受你的请求4xx 客户端有问题(地址错了之类的)5xx 服务端有问题 # p# P8 S; t% D3 ?: Q
解释可以自己定义,没啥用第二部分:一堆KEY和一堆VALUE(包括Content-Type:啥啥啥)第三部分:回车第四部分:返回的内容查看http响应内容:chrome中按F12呼出开发者工具,在network中在request里找个请求,找到response headers,点击viewsource,即可看到响应内容。 ' a5 ^3 u, I# ~- Y* C7 t! a) }
第四部分找到Preview或者Response即可。
2 q( d* | }( K" }5 b 如何使用curl命令:最简单1:用curl查看html:curl http://www.baidu.com最简单2:使用linux的重定向功能保存:curl http://www.baidu.com >> baidu.html ?, Z: n) G u5 J6 T. @
常用参数:-A/--user-agent 设置用户代理发送给服务器
M5 \# M9 M4 M$ \- _+ h -b/--cookie cookie字符串或文件读取位置+ F7 u+ S C) d- c# s% K7 I+ z6 s5 ^
-c/--cookie-jar 操作结束后把cookie写入到这个文件中
8 P( d/ b0 k1 c8 ^0 x -C/--continue-at 断点续转
- i! [# {% S2 u5 [ -D/--dump-header 把header信息写入到该文件中1 }: r r' e0 A2 }3 T+ U) {
-e/--referer 来源网址
. D7 }/ r! `- x9 L* z+ Q& W -f/--fail 连接失败时不显示http错误
1 c, p" \- \ \1 @0 \ -o/--output 把输出写到该文件中
1 ^+ X5 R' G- M* B3 s: ]% g: h -O/--remote-name 把输出写到该文件中,保留远程文件的文件名
8 D! @ o7 t) T5 t# W. X/ l% c -r/--range 检索来自HTTP/1.1或FTP服务器字节范围1 m4 `' |! {0 R1 U6 ^
-s/--silent 静音模式。
2 n- g. w4 f) m2 _( I 不输出任何东西
& d6 R3 z9 B; h1 x6 e -T/--upload-file 上传文件" ^) t& |. t$ ]
-u/--user 设置服务器的用户和密码7 u3 X) @. E" h7 X" U. s
-w/--write-out [format] 什么输出完成后" y: K3 W! l& z% \3 [( Y3 d
-x/--proxy 在给定的端口上使用HTTP代理
. i" t7 B6 N! Y0 z" M! S: Y -#/--progress-bar 进度条显示当前的传送状态 |2 C+ E: y' R5 r
; X7 [2 P3 A. M3 A- y. l
其他参数:8 p u8 ~( A1 H I
-a/--append 上传文件时,附加到目标文件
$ M* i- F' c/ B- }5 N --anyauth 可以使用“任何”身份验证方法9 X# Y; T( x4 m5 C
--basic 使用HTTP基本验证% y7 ]: j6 R3 z' p$ ^) ~/ c1 X% u
-B/--use-ascii 使用ASCII文本传输
, @, y4 I! U" E -d/--data HTTP POST方式传送数据1 x5 R y+ W) N7 ]; U
--data-ascii 以ascii的方式post数据% v C* m7 m( ?, g6 n3 f1 _% h
--data-binary 以二进制的方式post数据
. G% l' M7 y; k) ], d9 Y --negotiate 使用HTTP身份验证: y5 e6 @! n7 F
--digest 使用数字身份验证2 v3 _+ i5 z, H+ X' A& p, x2 }
--disable-eprt 禁止使用EPRT或LPRT3 W r6 z! i# X; X. x2 t- c1 o) F
--disable-epsv 禁止使用EPSV2 ]! d- X. \6 d" k0 ?7 K x
--egd-file 为随机数据(SSL)设置EGD socket路径# C: m2 @1 {9 ]1 y$ I/ R
--tcp-nodelay 使用TCP_NODELAY选项* L9 `. Q+ Z* L. `, B
-E/--cert 客户端证书文件和密码 (SSL)! Q0 A: r2 E( o6 M
--cert-type 证书文件类型 (DER/PEM/ENG) (SSL)
$ [; W" I6 C. V/ ~, i --key 私钥文件名 (SSL)) b- ]1 w: J7 X9 e) A" I
--key-type 私钥文件类型 (DER/PEM/ENG) (SSL)7 X9 |2 F4 ~3 n& Q, w @5 A
--pass 私钥密码 (SSL)/ h1 Q% u# u: }1 t8 l. s
--engine 加密引擎使用 (SSL). "--engine list" for list
3 n W1 b$ d+ ?' \ --cacert CA证书 (SSL)
7 N( }: k' I) S, B2 g; @ --capath CA目 (made using c_rehash) to verify peer against (SSL)" s2 @4 X1 d3 ?, X& B3 h1 `
--ciphers SSL密码; m7 r, Y" O0 s, V5 ~
--compressed 要求返回是压缩的形势 (using deflate or gzip)- Y! f% C: j! W5 s0 p5 @
--connect-timeout 设置最大请求时间) V' Y1 a1 @0 G7 S" X3 H
--create-dirs 建立本地目录的目录层次结构! s+ J7 [7 ^: Y8 k8 @# y4 A K
--crlf 上传是把LF转变成CRLF& M. F2 @! @8 j: I' t
--ftp-create-dirs 如果远程目录不存在,创建远程目录/ L1 K: G5 q; F
--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用& l K3 K* }) J9 y0 |5 b! Q( ~! J4 A
--ftp-pasv 使用 PASV/EPSV 代替端口0 z' y) e! K% Q7 ] d4 U
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址8 T& c- q x9 b4 T! w, u
--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输3 \- `/ v( h, d8 v
--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输
+ _- E, p; Q; ^7 Y8 W -F/--form 模拟http表单提交数据+ w, P2 X% A- b6 V" y
-form-string 模拟http表单提交数据) G1 D [$ }3 x7 P- H
-g/--globoff 禁用网址序列和范围使用{}和[]
' N% P0 i, G8 u% I s; ] -G/--get 以get的方式来发送数据8 F' ?+ D$ u0 x1 g3 H- a0 A
-h/--help 帮助6 e; ?1 u8 v4 w. z$ a
-H/--header 自定义头信息传递给服务器! J; G. t' \+ |* }4 @# h
--ignore-content-length 忽略的HTTP头信息的长度5 t ?* I6 p" ?6 X
-i/--include 输出时包括protocol头信息
! d9 E: n( w8 d -I/--head 只显示文档信息6 D" C8 v, _ {0 N7 d
-j/--junk-session-cookies 读取文件时忽略session cookie
0 H0 r0 v; {! ]0 M4 h' [* P --interface 使用指定网络接口/地址
, [0 `. E4 q5 L3 H# u5 j. \ --krb4 使用指定安全级别的krb4" A2 F5 X5 }+ g, J& n3 Z
-k/--insecure 允许不使用证书到SSL站点& |. w; D& { \7 \7 Y, D' y$ Y
-K/--config 指定的配置文件读取
( m. ~9 ~5 D( T# Z! q -l/--list-only 列出ftp目录下的文件名称
7 G) f2 x. F8 v* p --limit-rate 设置传输速度' `7 G( W/ g" Z- _2 c
--local-port 强制使用本地端口号
; ~- K) n, ~8 b0 f, ] -m/--max-time 设置最大传输时间
# b, g$ b& g# N: K2 O$ M --max-redirs 设置最大读取的目录数1 U# r# ^6 S+ A F- C- Z8 L5 e
--max-filesize 设置最大下载的文件总量
: ?* A3 I( |! L0 _8 ^$ X -M/--manual 显示全手动
) q# h3 y1 K& T3 A) c) X -n/--netrc 从netrc文件中读取用户名和密码9 S, S0 }. {) l# ^/ H9 q/ n6 R3 m
--netrc-optional 使用 .netrc 或者 URL来覆盖-n( S1 Q. z& k6 U" B& t+ }5 ?5 U& i: a+ h
--ntlm 使用 HTTP NTLM 身份验证$ G: |6 | G! T1 l- D4 F) ~
-N/--no-buffer 禁用缓冲输出$ z3 |+ h' _, S L! e! u7 ?
-p/--proxytunnel 使用HTTP代理
' @; R! l9 `7 Q --proxy-anyauth 选择任一代理身份验证方法
1 L# G7 b' [% a& S --proxy-basic 在代理上使用基本身份验证- M9 o) i. c, F' ~
--proxy-digest 在代理上使用数字身份验证 g8 g% t/ i3 H( v1 w/ m* i9 q
--proxy-ntlm 在代理上使用ntlm身份验证- r6 l( t) F! C
-P/--ftp-port 使用端口地址,而不是使用PASV4 c+ Y1 }! v" y* `/ l
-Q/--quote 文件传输前,发送命令到服务器
2 W" u4 s: r8 O% U0 K1 L --range-file 读取(SSL)的随机文件; F. a, W( L5 r4 H$ C
-R/--remote-time 在本地生成文件时,保留远程文件时间
: e) ~7 j- t) c' p( Y. Y) R- w/ j$ p --retry 传输出现问题时,重试的次数! ~ D' J) R' ]* V
--retry-delay 传输出现问题时,设置重试间隔时间
$ \" O1 y$ y* Y' Q0 c3 e3 d* m --retry-max-time 传输出现问题时,设置最大重试时间
) c' a# }% S8 a9 J -S/--show-error 显示错误$ ]6 X6 Y, h* t7 k+ ?- d {/ i, F
--socks4 用socks4代理给定主机和端口( ^6 T& B$ D* v6 }1 e4 A- N
--socks5 用socks5代理给定主机和端口
. e7 G( S0 C2 a9 d" Z -t/--telnet-option Telnet选项设置+ t8 V& n; r; S0 g% z) ^, T
--trace 对指定文件进行debug2 ]4 K; L! ]: W4 Z ^
--trace-ascii Like --跟踪但没有hex输出 f9 G, ~1 I5 ]7 R- F3 F2 B
--trace-time 跟踪/详细输出时,添加时间戳" o3 s0 D% @' J* }
--url Spet URL to work with( R( j1 R7 |% R- Y8 E) ?
-U/--proxy-user 设置代理用户名和密码# s: V& e. P8 v" Q! L
-V/--version 显示版本信息
& q0 I& `; n8 r3 w& A -X/--request 指定什么命令6 X' {" t8 B% @0 T- ?; Z) z# {
-y/--speed-time 放弃限速所要的时间。 0 o1 a6 |, ]& e% C$ K* }( l, h2 ]* T
默认为30
& Q7 L& t3 @/ U# v& G/ M -Y/--speed-limit 停止传输速度的限制,速度时间秒2 }, |* U+ |* a/ b
-z/--time-cond 传送时间设置
! X& \( |9 Z4 D' P% E -0/--http1.0 使用HTTP 1.00 Z& l a6 G0 _! S/ }. }
-1/--tlsv1 使用TLSv1(SSL)
1 R, g& ^. \" X% D3 y, l/ ]( A -2/--sslv2 使用SSLv2的(SSL)+ E4 p# s, I/ `+ {( }3 u% d
-3/--sslv3 使用的SSLv3(SSL)( Z$ _# F( M7 S3 L. H3 L( ^1 P2 \/ l
--3p-quote like -Q for the source URL for 3rd party transfer
+ S: e4 |( u+ `, o6 ^' R5 ] --3p-url 使用url,进行第三方传送
) u: k$ \2 g$ h& r+ W --3p-user 使用用户名和密码,进行第三方传送0 M0 e {; ]% x/ G X8 g6 m5 r( o) V
-4/--ipv4 使用IP4
9 ^7 ?6 d! B& ^5 n: c0 ?- W3 k9 h -6/--ipv6 使用IP6。 ! e3 r- F, I1 f$ q& q0 A
$ K( |. _( s; @7 `( ?( G
1 J9 x7 O ~4 {3 s' }, c; C5 S1 @# K
- K \8 M: M7 F& I# U! x |