|
0 G7 k! ?4 P% [7 r8 d4 a http请求第一部分:动词 +路径+http协议/版本号,其中动词包括 GET POST PUT PATCH DELETE HEAD OPTIONS 等路径包括查询参数如?username=xxxxx但不包括锚点如#1111
5 O0 V2 l* k+ T0 x$ q: ?: U9 W 如果不写路径,则默认为/例:GET/ HTTP/1.1POST/ HTTP/1.1第二部分:一堆KEY和一堆value例:Host:http://cxcccc.com, i% Q) D, K) R( }: Y* r5 X
Connection: keep-alive
& c. X! {* V/ j7 s" D+ \ Upgrade-Insecure-Requests: 1
/ [9 u% J3 \7 F0 O 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
k, A4 l8 i- l y Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
/ p; \3 T8 Z: f& i l2 @& T Referer: http://cxcccc.com: _( D6 g2 |8 i+ l9 R- B4 J
Accept-Encoding: gzip, deflate, br
4 ^6 K& G9 Y. \. ~" [6 u Accept-Language: zh-CN,zh;q=0.9
7 M9 |/ S0 F5 L+ s; O0 _" N* h 注意:如果第四部分有数据,则第二部分需要标注他的格式,如:Content-Type:application/x-www-form-urlencoded第三部分:回车第四部分要上传的数据,可以为空(比如一些get的时候) / m! k- S. Z- B M; f" l1 o% L
例:当我 curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "http://www.baidu.com"时,第四部分为1234567890查看http请求内容:
6 o! t, q/ a, b4 n: m chrome中按F12呼出开发者工具,在network中在request里找个请求,找到request headers,点击viewsource,即可看到请求内容。
2 t. N) `. \' ]2 R 第四部分找到payload或者formdata即可。 0 Z# x7 |! N( I7 X: V& P3 F f7 ]
http响应第一部分:协议/版本号 状态码 解释如:http/1.1 200 ok其中状态码需要背下来:1xx 不常用2xx 成功了3xx 不接受你的请求4xx 客户端有问题(地址错了之类的)5xx 服务端有问题 ! R- w# E* _( _6 j" X
解释可以自己定义,没啥用第二部分:一堆KEY和一堆VALUE(包括Content-Type:啥啥啥)第三部分:回车第四部分:返回的内容查看http响应内容:chrome中按F12呼出开发者工具,在network中在request里找个请求,找到response headers,点击viewsource,即可看到响应内容。
' d! D2 h8 j7 [7 h 第四部分找到Preview或者Response即可。 # N6 ~: u& q5 j0 R1 y% q( |
如何使用curl命令:最简单1:用curl查看html:curl http://www.baidu.com最简单2:使用linux的重定向功能保存:curl http://www.baidu.com >> baidu.html 0 M" J/ O( z9 y) i. V9 G( }
常用参数:-A/--user-agent 设置用户代理发送给服务器
# |1 s, v! |; ~- y& R -b/--cookie cookie字符串或文件读取位置; ?( T$ L- _4 M6 f Z
-c/--cookie-jar 操作结束后把cookie写入到这个文件中: S6 ^9 Z! N+ }6 {
-C/--continue-at 断点续转
" j7 N& j h- H& `% `, _% w -D/--dump-header 把header信息写入到该文件中! o R/ W+ t; f" {& \: p
-e/--referer 来源网址
" E2 j# C H7 R/ w: K1 \( W: ` -f/--fail 连接失败时不显示http错误
~. c% O. G0 D; S/ J -o/--output 把输出写到该文件中% o v$ G& n1 `7 B' q {
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名) R( ]2 P6 P/ D6 A* r6 d$ }
-r/--range 检索来自HTTP/1.1或FTP服务器字节范围. h. K' c9 s( G- S
-s/--silent 静音模式。
u- n3 d1 e# Y 不输出任何东西6 [ u0 K" W% s% M
-T/--upload-file 上传文件
H& K4 j8 C1 r7 r9 k S; p6 h -u/--user 设置服务器的用户和密码' ~! \# h# |6 r' O; B: A
-w/--write-out [format] 什么输出完成后
- n3 j& L! f' |4 s- N -x/--proxy 在给定的端口上使用HTTP代理4 v+ Y/ a! Y* [$ k3 g- f6 W2 O
-#/--progress-bar 进度条显示当前的传送状态0 R- T4 t' W% `" d
# n- R$ X G4 U2 r7 L9 X% g- O) N
其他参数:( T& ?0 r$ t$ u* g6 M$ `
-a/--append 上传文件时,附加到目标文件( c/ c2 O7 w( \$ H z
--anyauth 可以使用“任何”身份验证方法7 j0 C6 J' L l x8 Z; R2 g( R% B5 L
--basic 使用HTTP基本验证
' X6 A: I6 Q: l6 d+ o$ s4 W3 n) R -B/--use-ascii 使用ASCII文本传输
# f# y/ ^6 W, W: |; b: m' Q5 N -d/--data HTTP POST方式传送数据
' Q. w/ m9 R0 [/ n --data-ascii 以ascii的方式post数据2 n9 Y& ?- y% d/ V5 E- T7 S6 ~* L
--data-binary 以二进制的方式post数据
5 d' G2 ~) V+ |$ N --negotiate 使用HTTP身份验证
* @; A0 Z) }1 P1 N8 [) \# ? --digest 使用数字身份验证0 T& j- M3 s( ]( F
--disable-eprt 禁止使用EPRT或LPRT* c; z) B4 ?1 R z# g, i
--disable-epsv 禁止使用EPSV
+ L* Q1 f6 v$ x1 c/ ^ --egd-file 为随机数据(SSL)设置EGD socket路径
/ D( F# K9 f/ u --tcp-nodelay 使用TCP_NODELAY选项
: c, U5 d3 W! [ -E/--cert 客户端证书文件和密码 (SSL)
& Q5 H4 f# A' H% s0 K --cert-type 证书文件类型 (DER/PEM/ENG) (SSL)0 h v" x1 {! x) G
--key 私钥文件名 (SSL)( Q# o6 {: _& X$ s+ Q n
--key-type 私钥文件类型 (DER/PEM/ENG) (SSL)
& S3 N3 r0 M1 Q; M3 Q5 [0 S --pass 私钥密码 (SSL)
u, q- h R1 _ --engine 加密引擎使用 (SSL). "--engine list" for list
, T! x, _6 A/ _$ T1 U2 l --cacert CA证书 (SSL)! W$ a- S/ `# i! L
--capath CA目 (made using c_rehash) to verify peer against (SSL)
7 F! H% X% d) j- a; @9 \6 f/ ]. U --ciphers SSL密码$ B( n& d- b3 ~& i4 h! N2 ~2 R7 W
--compressed 要求返回是压缩的形势 (using deflate or gzip)
" a5 h) L- p; r8 d. a2 q --connect-timeout 设置最大请求时间& x; f! w2 }( [- ]
--create-dirs 建立本地目录的目录层次结构
: }4 O4 i& r/ N1 H/ o --crlf 上传是把LF转变成CRLF# W" c6 y( R7 O5 B$ `# Q/ \! _
--ftp-create-dirs 如果远程目录不存在,创建远程目录
+ [2 `' j+ v; y --ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
! \9 [( g) c4 l3 L7 c --ftp-pasv 使用 PASV/EPSV 代替端口/ S* p3 h$ z, j V. W' u
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址: z& T; |8 \+ C# e
--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输
: N" h: f% P6 s/ t# ^. g3 G --ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输. i( R, Y7 ^9 i# J* N3 J
-F/--form 模拟http表单提交数据8 i: X, R. G% s) V
-form-string 模拟http表单提交数据( o; }; y* V& H$ p6 E# o, A
-g/--globoff 禁用网址序列和范围使用{}和[]( k' L# m* F1 X/ u+ Q# N
-G/--get 以get的方式来发送数据: m1 E; {# n/ y" \5 o* U/ F5 v
-h/--help 帮助
: q4 m5 l! C* N6 l+ ?* L -H/--header 自定义头信息传递给服务器' ?8 n& V3 z0 b. ~' z' p3 @8 O
--ignore-content-length 忽略的HTTP头信息的长度
$ k, @0 I1 \; k% P -i/--include 输出时包括protocol头信息, G& j8 T2 Q+ r4 V
-I/--head 只显示文档信息
5 V( H7 C5 T4 n3 U$ \0 I, V% E -j/--junk-session-cookies 读取文件时忽略session cookie9 b/ W, h/ c n
--interface 使用指定网络接口/地址9 a, Q) c* `; \" t1 |1 j, U
--krb4 使用指定安全级别的krb4
' e7 b P1 o9 ~6 b" i( X0 F) j -k/--insecure 允许不使用证书到SSL站点
- X& J/ n+ d# ^4 K3 D o) o8 v -K/--config 指定的配置文件读取/ |4 o O5 O1 L) `7 e. u+ `0 w+ [
-l/--list-only 列出ftp目录下的文件名称4 A3 z- j$ t& b% `
--limit-rate 设置传输速度: E. U4 x$ V! u5 x0 e* _
--local-port 强制使用本地端口号
# F; v4 B' v+ f$ @2 b. a0 _. O -m/--max-time 设置最大传输时间5 G; o1 d7 b4 {0 h8 m/ ~
--max-redirs 设置最大读取的目录数3 r# j. q% O- N L/ I6 h. k
--max-filesize 设置最大下载的文件总量# {( q+ ?+ d7 ^% k9 S: A7 h! {
-M/--manual 显示全手动$ O5 ^3 w! N/ @2 {3 W) J
-n/--netrc 从netrc文件中读取用户名和密码
% }. N7 w- b( x0 f: s+ r# `0 r# \ --netrc-optional 使用 .netrc 或者 URL来覆盖-n
_3 n& A0 M$ C7 b7 j" Y5 P --ntlm 使用 HTTP NTLM 身份验证
7 |# k' ]: R4 b' R1 ^& y# v4 B& S -N/--no-buffer 禁用缓冲输出. q% C( l1 M+ {/ J8 T N2 L$ M
-p/--proxytunnel 使用HTTP代理
& k! c0 X* V- x0 o ?% d --proxy-anyauth 选择任一代理身份验证方法
# ^- T! r" Q0 o --proxy-basic 在代理上使用基本身份验证: f( g" Z' z. z
--proxy-digest 在代理上使用数字身份验证/ H0 z! c; U3 U
--proxy-ntlm 在代理上使用ntlm身份验证/ A& C; L8 n. [5 D# a. w" D
-P/--ftp-port 使用端口地址,而不是使用PASV! T4 v/ R; @7 q s* M+ ~0 v$ U9 A6 A
-Q/--quote 文件传输前,发送命令到服务器
6 h3 d( Z9 T- D& Y" v. { --range-file 读取(SSL)的随机文件4 r6 V6 t3 y' X) a: U- H
-R/--remote-time 在本地生成文件时,保留远程文件时间8 l# B d# a$ R9 H8 e" K
--retry 传输出现问题时,重试的次数2 d! }0 N7 s) u/ P/ N
--retry-delay 传输出现问题时,设置重试间隔时间: c8 i, K( ~& V% E
--retry-max-time 传输出现问题时,设置最大重试时间
5 n$ N7 i1 H" S; @- v2 ? -S/--show-error 显示错误
9 O5 q& {2 d/ f* }$ U* b --socks4 用socks4代理给定主机和端口6 D: v: Y! U: R- f
--socks5 用socks5代理给定主机和端口% r* C) `( p( d: z. Q- |7 |% @5 L( [
-t/--telnet-option Telnet选项设置) m K9 V8 C3 F( h- X2 J: p/ r
--trace 对指定文件进行debug
2 F! W7 c! ^8 l1 r --trace-ascii Like --跟踪但没有hex输出
5 ~8 {( }/ H# O7 l --trace-time 跟踪/详细输出时,添加时间戳
+ L% d7 l& M$ ]6 D/ O+ v# s --url Spet URL to work with
; X/ L, @2 b0 N# Z -U/--proxy-user 设置代理用户名和密码3 E& e* B$ b& y! u- R2 h
-V/--version 显示版本信息
; `9 Q9 ~' V1 w2 y1 x1 z -X/--request 指定什么命令
3 Y* X0 o# {3 ~5 t* a% t2 C3 H -y/--speed-time 放弃限速所要的时间。 ) _6 G/ G2 G9 r! N7 r0 M Q- Q9 Y
默认为30
7 }$ ?0 J r9 ?, s! K -Y/--speed-limit 停止传输速度的限制,速度时间秒
3 ?5 i4 N6 o5 N. u -z/--time-cond 传送时间设置+ ^/ y" x% r' M/ t+ g* m/ f
-0/--http1.0 使用HTTP 1.0
# y: ~: i& D1 N -1/--tlsv1 使用TLSv1(SSL)
. W4 V6 x4 y) E -2/--sslv2 使用SSLv2的(SSL)
8 \- c# j% G5 T$ n -3/--sslv3 使用的SSLv3(SSL)3 _; r( \$ \: p+ I8 h! H
--3p-quote like -Q for the source URL for 3rd party transfer, D' p9 y6 C9 G9 i5 }) A: z! U: i$ S
--3p-url 使用url,进行第三方传送+ C# R+ X; A. _, m* i% ~
--3p-user 使用用户名和密码,进行第三方传送
`. O5 H0 Y; s0 h* L -4/--ipv4 使用IP4. T7 `5 K" z: J
-6/--ipv6 使用IP6。 , Y* j" }- U3 q+ s$ k! ~
9 Y' d2 v- l1 R4 t! G0 g F
9 k. n c( h0 S: G
% E, }, Y$ A$ c5 l T
( J- Y; A5 J+ c. e, k5 y1 l/ j |