|
0 Z8 c% v# K5 h9 w
http请求第一部分:动词 +路径+http协议/版本号,其中动词包括 GET POST PUT PATCH DELETE HEAD OPTIONS 等路径包括查询参数如?username=xxxxx但不包括锚点如#1111 1 ~9 N8 ~* S/ e( _
如果不写路径,则默认为/例:GET/ HTTP/1.1POST/ HTTP/1.1第二部分:一堆KEY和一堆value例:Host:http://cxcccc.com
- c/ d# |1 e( `; y Connection: keep-alive+ R% b& f: B X3 j, F/ p4 L
Upgrade-Insecure-Requests: 1
) M/ E. e1 e" d0 n 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
7 K y) j: T' t% W# R2 M Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" n& Y- g6 ?+ i" n6 _
Referer: http://cxcccc.com
~7 _7 r4 g; R# ` Accept-Encoding: gzip, deflate, br
$ O2 Z# H9 k& H. v) } Accept-Language: zh-CN,zh;q=0.9
! t: F4 n! [+ v. g' N5 B$ ` 注意:如果第四部分有数据,则第二部分需要标注他的格式,如:Content-Type:application/x-www-form-urlencoded第三部分:回车第四部分要上传的数据,可以为空(比如一些get的时候) $ B- V! @) B+ r/ M' a8 S
例:当我 curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "http://www.baidu.com"时,第四部分为1234567890查看http请求内容:
# ^1 J( l0 Q, p" v chrome中按F12呼出开发者工具,在network中在request里找个请求,找到request headers,点击viewsource,即可看到请求内容。
, U0 g' Q, c/ R' u, B' { 第四部分找到payload或者formdata即可。 / U0 b- ?: _# }! n7 s
http响应第一部分:协议/版本号 状态码 解释如:http/1.1 200 ok其中状态码需要背下来:1xx 不常用2xx 成功了3xx 不接受你的请求4xx 客户端有问题(地址错了之类的)5xx 服务端有问题 " H$ w; Z% S8 [; G* v6 V* h
解释可以自己定义,没啥用第二部分:一堆KEY和一堆VALUE(包括Content-Type:啥啥啥)第三部分:回车第四部分:返回的内容查看http响应内容:chrome中按F12呼出开发者工具,在network中在request里找个请求,找到response headers,点击viewsource,即可看到响应内容。
. p' v( O7 l6 J 第四部分找到Preview或者Response即可。 / u! g5 F1 K% M+ _ {( `* T
如何使用curl命令:最简单1:用curl查看html:curl http://www.baidu.com最简单2:使用linux的重定向功能保存:curl http://www.baidu.com >> baidu.html
! i3 M2 Z9 X* g0 B1 i8 ] 常用参数:-A/--user-agent 设置用户代理发送给服务器
, H: V' l9 W, e9 K! k: h! c, k -b/--cookie cookie字符串或文件读取位置, ]+ [. V4 ]/ x
-c/--cookie-jar 操作结束后把cookie写入到这个文件中( g- ?7 j& \" b( H
-C/--continue-at 断点续转# u- \5 Z7 y% P
-D/--dump-header 把header信息写入到该文件中
: V* I3 a0 o$ c& g. F5 O# v -e/--referer 来源网址
7 p$ v' ?% m+ r j$ R# m% Z1 s% s -f/--fail 连接失败时不显示http错误6 L9 X+ P0 k9 Q, @1 r: \& @
-o/--output 把输出写到该文件中
7 Z' t0 v+ q* L4 V6 ^+ j -O/--remote-name 把输出写到该文件中,保留远程文件的文件名9 L' g: }( J, Y* \( F- p
-r/--range 检索来自HTTP/1.1或FTP服务器字节范围
6 Y! u2 V' s0 r" Q -s/--silent 静音模式。
& L& v8 o( A, a6 a8 O& ^; O 不输出任何东西! i7 h9 E! _! K3 }
-T/--upload-file 上传文件
/ P$ P [0 Y/ A" ~/ R9 c9 `( n8 [ -u/--user 设置服务器的用户和密码
6 W: N* o" {# x" H( F' [4 m& g; r -w/--write-out [format] 什么输出完成后
& |: I, Z6 u: U4 G: r d. N -x/--proxy 在给定的端口上使用HTTP代理
' G) ?6 E0 S. ~0 u' W -#/--progress-bar 进度条显示当前的传送状态+ T. B+ t+ I0 O0 S& P- K0 [) R
" O i7 u/ G: g3 ?+ X 其他参数:
+ I' {8 z. {- z -a/--append 上传文件时,附加到目标文件: b( I; z' X/ P) o1 H
--anyauth 可以使用“任何”身份验证方法
: y# K0 D; P9 I4 `% V4 t% x --basic 使用HTTP基本验证
! `+ Y) H! t" z/ Z! j; p$ D -B/--use-ascii 使用ASCII文本传输
7 r& y+ m. D$ ?6 p. O( C -d/--data HTTP POST方式传送数据3 Y6 D! s# z8 r( ~" _) h0 ^4 Q
--data-ascii 以ascii的方式post数据
. R) m/ I# Z" v9 ^) ~7 g. j- G7 Q --data-binary 以二进制的方式post数据
+ r: z" ^, Q5 n$ b) P" q7 e7 r, A --negotiate 使用HTTP身份验证6 @% O' Z d. j8 n) Z
--digest 使用数字身份验证
8 h6 g# x; L. y# W! `, C3 N --disable-eprt 禁止使用EPRT或LPRT1 }" F/ K1 r, g8 m9 j3 Y" T
--disable-epsv 禁止使用EPSV: i3 o( S; |! \ P- Q- o* C
--egd-file 为随机数据(SSL)设置EGD socket路径
4 v8 K: m. a: } --tcp-nodelay 使用TCP_NODELAY选项5 X# @% H6 H) B, E" _
-E/--cert 客户端证书文件和密码 (SSL)
/ I. P+ P- Z: e$ O --cert-type 证书文件类型 (DER/PEM/ENG) (SSL)( B6 k: i2 {+ v# d5 ~
--key 私钥文件名 (SSL): E; t+ v. s3 p4 ^* K
--key-type 私钥文件类型 (DER/PEM/ENG) (SSL)
! J8 T) z" l( v" |# D --pass 私钥密码 (SSL)
6 T1 z# @# ~! D' p/ l8 i' z; M- _ --engine 加密引擎使用 (SSL). "--engine list" for list0 [3 `: D# X6 L. h% M2 b( W/ w
--cacert CA证书 (SSL)
) B2 q i" a( _9 l( w --capath CA目 (made using c_rehash) to verify peer against (SSL): z9 K7 [1 R9 M" N/ [3 `
--ciphers SSL密码
$ O. J1 ^ k" R, I7 \" [ --compressed 要求返回是压缩的形势 (using deflate or gzip)( |$ o. \" d8 O+ [
--connect-timeout 设置最大请求时间
) D4 I) b Q# C8 t. B --create-dirs 建立本地目录的目录层次结构7 |, X/ J: j& `% n
--crlf 上传是把LF转变成CRLF" W5 } c, [9 P
--ftp-create-dirs 如果远程目录不存在,创建远程目录
0 @: t. Y9 |* q$ [7 w4 z+ W --ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用3 ^3 A- L- u# o/ ?+ D. M3 V
--ftp-pasv 使用 PASV/EPSV 代替端口( y0 _7 O p" p' O# F
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址5 {7 q! [3 j' u. }. v
--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输1 J- c: _' r6 b0 y& X) m5 H: N
--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输' W) n1 B8 t. ?* E: v/ ]
-F/--form 模拟http表单提交数据6 }; h: z6 ^0 C7 ?5 A o I
-form-string 模拟http表单提交数据
5 Z( m: n4 q r" ?) W -g/--globoff 禁用网址序列和范围使用{}和[]) P3 C5 T8 b2 j
-G/--get 以get的方式来发送数据
# g: x, ^$ c/ L, k: F -h/--help 帮助' G$ n: y- s9 F A2 O$ a6 I
-H/--header 自定义头信息传递给服务器0 Q7 v9 c: H4 J
--ignore-content-length 忽略的HTTP头信息的长度; ^% t, e- t; t
-i/--include 输出时包括protocol头信息
F) f4 ~: u9 N; Q( V) g9 a -I/--head 只显示文档信息
4 j, \/ F% y5 g5 a% @" y- G% F -j/--junk-session-cookies 读取文件时忽略session cookie4 Y9 r1 r g8 c, T' x
--interface 使用指定网络接口/地址( `8 q* f6 j* o6 R! U% I" o
--krb4 使用指定安全级别的krb4+ T2 g" s5 d) p
-k/--insecure 允许不使用证书到SSL站点
% E8 i6 F. Y4 C3 [# a+ |/ `/ K -K/--config 指定的配置文件读取
# G& `& k0 j, u- x0 l -l/--list-only 列出ftp目录下的文件名称
8 ^- q: m9 h8 ]/ r9 U --limit-rate 设置传输速度/ |9 ]/ V# h/ t$ r8 F# ?
--local-port 强制使用本地端口号
( l c7 ]: Y3 @' b& n -m/--max-time 设置最大传输时间
h3 q3 L: ^* O% b5 p5 U( A) V% `6 ` --max-redirs 设置最大读取的目录数
^9 E' \* I% L --max-filesize 设置最大下载的文件总量
9 x) L* t5 k* Z: Q9 q( E: m -M/--manual 显示全手动4 ?6 b& o- ~* G7 j; X% f
-n/--netrc 从netrc文件中读取用户名和密码' L8 P4 y9 K# K3 P/ n5 o
--netrc-optional 使用 .netrc 或者 URL来覆盖-n
; g' z; G5 _; x- F$ }3 d) F --ntlm 使用 HTTP NTLM 身份验证
0 ~, Z7 s. f Q( C: t6 N9 M -N/--no-buffer 禁用缓冲输出
. W q' @4 o' I+ I* B& ^ -p/--proxytunnel 使用HTTP代理
- F6 Y$ P3 o. X1 ?$ O. ~" j y --proxy-anyauth 选择任一代理身份验证方法0 M" u% L: i+ E7 T0 j% a" @
--proxy-basic 在代理上使用基本身份验证+ U! h- b6 y) D$ @9 m) k
--proxy-digest 在代理上使用数字身份验证
L# Y% R& T( f --proxy-ntlm 在代理上使用ntlm身份验证
5 ^$ g8 h: B$ p3 _% F -P/--ftp-port 使用端口地址,而不是使用PASV* K) t" i: L7 L
-Q/--quote 文件传输前,发送命令到服务器3 d9 e! y- X2 e9 w* R8 T9 ?
--range-file 读取(SSL)的随机文件5 z5 D# v" Y: e0 s7 E
-R/--remote-time 在本地生成文件时,保留远程文件时间
+ l. B# h* { k --retry 传输出现问题时,重试的次数
8 F/ [' ?( i5 H+ [7 Q. T9 y; q2 j --retry-delay 传输出现问题时,设置重试间隔时间
/ T# }* w" r" H; f1 |6 {! E' W --retry-max-time 传输出现问题时,设置最大重试时间
; ]+ i9 ^0 l% J2 S$ I& O. T3 F, |. Y -S/--show-error 显示错误7 C( L" p7 z, Z0 z$ ^* n, \5 D
--socks4 用socks4代理给定主机和端口
) U4 K+ s2 Q! B' j7 V3 z, Y --socks5 用socks5代理给定主机和端口
7 b( @3 G6 _, ^/ w6 Y, g$ j -t/--telnet-option Telnet选项设置
1 u9 |3 D6 S/ U/ c2 J! [ --trace 对指定文件进行debug$ T) b+ R( h1 s+ k& `" S; M! i& X
--trace-ascii Like --跟踪但没有hex输出) J3 b; g; z% v# W0 r& z: j8 k
--trace-time 跟踪/详细输出时,添加时间戳
4 d$ r6 }* r6 Z) M O$ S --url Spet URL to work with D2 p) s) c5 E1 i( p
-U/--proxy-user 设置代理用户名和密码# y! n7 P% B7 x3 F
-V/--version 显示版本信息
, A* m% p4 G$ f3 k% M$ ^ -X/--request 指定什么命令
: g" b, }8 Z, j% N -y/--speed-time 放弃限速所要的时间。
- t J( v$ M/ `7 E" a 默认为30. b* ]3 j; [4 X$ {! W* I; ^% F
-Y/--speed-limit 停止传输速度的限制,速度时间秒1 E/ K; v! F6 w7 @* \2 R% \
-z/--time-cond 传送时间设置
# L. f& K. `- z, M3 z -0/--http1.0 使用HTTP 1.0! C( n* x& i# M' m' w2 ]8 @) T
-1/--tlsv1 使用TLSv1(SSL): e4 N9 e) s E& M1 ~) `5 y
-2/--sslv2 使用SSLv2的(SSL)
: {. U9 r$ H! L6 K. K -3/--sslv3 使用的SSLv3(SSL)8 m5 p% V$ u S4 y1 c2 J! _
--3p-quote like -Q for the source URL for 3rd party transfer p' \5 p* j3 b% Y
--3p-url 使用url,进行第三方传送
, l* m# [( x% O& b j# w* { --3p-user 使用用户名和密码,进行第三方传送
/ m, e$ j- j" t4 }" R/ N4 S$ Z# @+ u -4/--ipv4 使用IP4* l. V3 ~& W( A! o
-6/--ipv6 使用IP6。 # r$ s1 ?; _! B
3 q* k F9 o! q: T9 V, v Q$ R6 |
. \: c: g3 F& O) A$ j
' `2 ^; \& B) S% W* P) C8 d) ?8 n$ P7 \* d
|