|
3 K: S: ?: F* X7 t/ h
概述最近系统总是url告警,有点烦,所以想要通过curl来获取http各阶段时间,定位下问题的原因,看能不能获取一些有效信息,下面介绍下curl的参数和常用的一些用法curl的部分参数解释:http_code http状态码,如200成功,301转向,404未找到,500服务器错误等。 5 G: L* `# J0 ]1 k
7 z+ e8 U" @7 |8 `
time_total 总时间,按秒计精确到小数点后三位
9 f0 H4 ]" i$ r. {4 l) p time_namelookup DNS解析时间,从请求开始到DNS解析完毕所用时间6 p7 a0 n! P/ `4 H1 {
time_connect 连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间,如果需要单纯的得到连接时间,用这个time_connect时间减去前边time_namelookup时间。
. z( C% D( Z' R( H. `$ Q/ @
& V! I$ M+ N$ j: _. Y time_appconnect 连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间$ W2 \3 O4 Z* l
time_pretransfer 从开始到准备传输的时间* z" ?5 T4 p: Y) L5 t- n6 I2 J' P
time_redirect 重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间。
" x, B9 j6 x m& \
6 v- ~+ a; n6 k# d" I time_starttransfer 开始传输时间在client发出请求之后,Web 服务器返回数据的第一个字节所用的时间: I6 ~. m5 I1 q- p
size_download 下载大小
* ]& L. n$ v3 U size_upload 上传大小' j/ F2 k) t$ p, U s/ I0 v# O% V
size_header 下载的header的大小
% ?0 Q. V J; z size_request 请求的大小。 + U G. [9 c" k P. y
# D$ |4 R0 y0 e$ c! A% | speed_download 下载速度,单位-字节每秒
3 e1 h9 B) i0 |& N9 l2 r, B speed_upload 上传速度,单位-字节每秒) y$ q5 k0 o# S; Y3 D `# ~! W' I
content_type 就是content-Type,不用多说了,这是一个访问我博客首页返回的结果示例(text/html; charset=UTF-8);" V0 E: G6 {" o5 m# h& C
ssl_verify_result ssl认证结果,返回0表示认证成功。
" v+ I- d- i/ {
" b7 C& }! l; e( x T, p; L 1、直接访问使用#curl -o /dev/null -s -w %{http_code}:%{http_connect}:%{content_type}:%{time_namelookup}:%{time_redirect}:%{time_pretransfer}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download} www.baidu.com* a4 W, ]1 P# {
5 c f& a6 O3 M" |3 `* r
输出变量需要按照%{variable_name}的格式,如果需要输出%,double一下即可,即%%,同时,\n是换行,\r是回车,\t是TAB-w 指定格式化文件-o 请求重定向到,不带此参数则控制台输出返回结果。
' |( m' @4 f( D1 }# n -s 静默,不显示进度2、定义时间格式化文件访问#vim curl-time.txt: q6 w6 K) H2 ^
\n
: C1 q* F1 ]2 j- ?: J- r http: %{http_code}\n) V3 ]1 R; B$ B( f, W ]! a3 M
dns: %{time_namelookup}s\n, ^' M- s8 A0 \! n! ]! \- ?1 Y+ }
redirect: %{time_redirect}s\n; f' U R/ _- b0 b
time_connect: %{time_connect}s\n
2 `6 ~; w/ l) ~1 @, T) [. M time_appconnect: %{time_appconnect}s\n
9 b0 H# E5 Q1 s5 f# U3 X time_pretransfer: %{time_pretransfer}s\n4 k( Y& N+ Q8 Z$ B' ^
time_starttransfer: %{time_starttransfer}s\n5 e) {9 u+ N: X1 ]' O( b
size_download: %{size_download}bytes\n, @7 e* H9 p+ K- M) C
speed_download: %{speed_download}B/s\n
1 o3 B- E |- { ----------\n
2 I( G- y, T4 [ P/ X: M. G* } time_total: %{time_total}s\n" h! J! q4 Z4 P- r+ h& q. ?" H
\n
$ q- d3 O! u0 }& N+ X
" S U/ i; I8 ~$ U8 Z3 V" F 执行命令:#curl -w "@curl_time.txt" -s -H "Content-Type: application/json" --insecure --header Host: passport.500.com --data {"platform":"android","userimei":"F5D815EA2BD8DBARD","app_channel":"10000","mbimei":"9DB358AF","version":"3.1.4","username":"hqzx","userpass":"976af4"} --compressed https://119.147.113.177/user/login
7 n! h+ V) | \9 g
3 c& j' r, z- ]- t 3、curl以post请求方法3.1、以json格式数据 #curl -H "Content-Type: application/json" -X POST --data {"data":"1"} http://127.0.0.1/% i8 W S# @! p1 H, @
# I# B9 A, B0 o) S2 w
3.2、以&连接参数数据#curl -d "data=7778a8143f111272&score=19&app_key=8d49f16fe034b98b&_test_user=test01" "http://127.0.0.1"
5 H% Y7 u3 c% l4 P7 `0 N/ m& e U* ]
/ E! B& d) P) ]3 @" r: m 3.3、 附带文本数据,比如通过"浏览"选择本地的card.txt并上传发送post请求,其中-F 为带文件的形式发送post请求,blob为文本框中的name元素对应的属性值
9 X8 n' m8 w2 X% a: {! s
8 ]+ D! {/ m9 A5 O9 A K #curl -F "blob=@card.txt;type=text/plain" "http://172.16.102.208:8089/wiapi/score?leaderboard_id=7778a8143f111272&score=40&app_key=8d49f16fe034b98b&_test_user=test01"
; v6 m0 ]& O/ Y- B) @! g) m 。 : s8 Q- W }) F
4、curl调试时常用命令:curl -o /home/1.txt -s -w %{time_connect}:%{time_starttransfer}:%{time_total}\n http://10.92.xx.xx/nwpp/9 m' m% R* R! ] t
& {5 ^& A. O) P) n 这里可以看到有6次异常,4次正常,证明url访问不是很稳定。后面可以考虑让开发写个jar包去检测每个节点的访问情况。 7 [& v E4 K" V+ p0 t
大家如果碰到url告警方面的问题可以考虑自己写一些命令参数,然后去请求特定url来判断问题,整体逻辑都差不多。后面会分享更多关于平时工作中碰到问题的一些解决办法,感兴趣的朋友可以关注下!
' p; A G/ Q. g$ I& Q
9 Q3 L! D8 C2 \; ?) k; e# P4 N! @
- S/ r$ |6 l/ s, S4 W5 F
1 u Z1 Y9 d; T3 J
% g, f. z6 O0 f* _' H% y3 J |