1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
1、http请求跳转
[root@n86 bin] # curl -I -L 10.50.200.32
HTTP /1 .1 302 FOUND
Server: nginx /1 .6.2
Date: Fri, 25 Dec 2015 02:43:18 GMT
Content-Type: text /html ; charset=utf-8
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
Location: http: //10 .50.200.32 /charade/
 
HTTP /1 .1 200 OK
Server: nginx /1 .6.2
Date: Fri, 25 Dec 2015 02:43:18 GMT
Content-Type: text /html ; charset=utf-8
Connection: keep-alive
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Set-Cookie: csrftoken=5dY37iQgcjQnYh1jZdrxptyIkTfUh3Rr; expires=Fri, 23-Dec-2016 02:43:18 GMT; Max-Age=31449600; Path=/
 
 
2、https请求GET和PUT
使用证书  curl -s --cacert ca.crt
忽略证书  curl -s -k
curl -s -k -u  "user:passwd"  -H  "Content-type: application/xml"  -X GET https: //abc .com /api/vms
 
curl -s -k \
-u  "user:passwd"  \
-H  "Content-type: application/xml"  \
-d "
<vm>
<name>test03< /name >
<cluster><name>Host-Only< /name >< /cluster >
<template><name>centos6u5x64-small-01< /name >< /template >
< /vm >
" \
"https://e01.test/api/vms"
 
 
 
3、http状态
hostname =www.qq.com
 
1)得到http status
[root@svr200-22 ~] # curl -o /dev/null -s -w %{http_code} ${hostname}
200
 
 
2)得到详细的 http headers 信息
[root@svr200-22 ~] # curl -o /dev/null -v http://${hostname}
* About to connect() to www.qq.com port 80 ( #0)
*   Trying 14.17.32.211... connected
* Connected to www.qq.com (14.17.32.211) port 80 ( #0)
> GET / HTTP /1 .1
> User-Agent: curl /7 .19.7 (x86_64-redhat-linux-gnu) libcurl /7 .19.7 NSS /3 .14.0.0 zlib /1 .2.3 libidn /1 .18 libssh2 /1 .4.2
> Host: www.qq.com
> Accept: */*
   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0< HTTP /1 .1 200 OK
< Server: squid /3 .4.1
< Date: Wed, 15 Apr 2015 05:54:51 GMT
< Content-Type: text /html ; charset=GB2312
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< Expires: Wed, 15 Apr 2015 05:55:51 GMT
< Cache-Control: max-age=60
< Vary: Accept-Encoding
< X-Cache: HIT from shenzhen.qq.com
{ [data not shown]
100  582k    0  582k    0     0  5573k      0 --:--:-- --:--:-- --:--:-- 6544k* Connection  #0 to host www.qq.com left intact
 
* Closing connection  #0
 
 
 
  
3)指定一个目标主机IP(此处以从dns中得到的一个解析结果为例),得到 http headers 信息:
[root@svr200-22 ~] # nslookup ${hostname} |grep Address |grep -v "#53$" |cut -d " " -f2 |head -n 1 |xargs -i curl -I -H "Host:${hostname}" http://{}/ 
HTTP /1 .1 200 OK
Server: squid /3 .4.1
Date: Wed, 15 Apr 2015 05:53:16 GMT
Content-Type: text /html ; charset=GB2312
Connection: keep-alive
Vary: Accept-Encoding
Expires: Wed, 15 Apr 2015 05:54:16 GMT
Cache-Control: max-age=60
Vary: Accept-Encoding
X-Cache: HIT from shenzhen.qq.com
 
 
4)指定一个目标主机IP(此处以从dns中得到的一个解析结果为例),得到详细的 http headers 信息:
[root@svr200-22 ~] # nslookup ${hostname} |grep Address |grep -v "#53$" |cut -d " " -f2 |head -n 1 |xargs -i curl -o /dev/null -v -H "Host:${hostname}" http://{}/
* About to connect() to 14.17.32.211 port 80 ( #0)
*   Trying 14.17.32.211... connected
* Connected to 14.17.32.211 (14.17.32.211) port 80 ( #0)
> GET / HTTP /1 .1
> User-Agent: curl /7 .19.7 (x86_64-redhat-linux-gnu) libcurl /7 .19.7 NSS /3 .14.0.0 zlib /1 .2.3 libidn /1 .18 libssh2 /1 .4.2
> Accept: */*
> Host:www.qq.com
   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0< HTTP /1 .1 200 OK
< Server: squid /3 .4.1
< Date: Wed, 15 Apr 2015 05:53:46 GMT
< Content-Type: text /html ; charset=GB2312
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< Expires: Wed, 15 Apr 2015 05:54:46 GMT
< Cache-Control: max-age=60
< Vary: Accept-Encoding
< X-Cache: MISS from shenzhen.qq.com
{ [data not shown]
100  582k    0  582k    0     0  5349k      0 --:--:-- --:--:-- --:--:-- 5546k* Connection  #0 to host 14.17.32.211 left intact
 
* Closing connection  #0
 
 
5)得到请求响应时间
[root@svr200-22 ~] # curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" ${hostname}
time_connect: 0.046
time_starttransfer: 0.078
time_total: 0.078
 
 
 
4、curl GET 请求中传递参数为 json 格式,且需要传递变量进去时,如何处理转义的问题
有3种方式来处理:
 
1)转义参数中的: {} [] " 
curl -s \
     --unix-socket  /var/run/docker .sock \
     "http:/services?filters=\{\"name\":\[\"${service_name}\"\]\}"  \
     |jq  '.'
 
2)转义参数中的: url外层不用 "" 包含,内层使用  ''  来限制。
curl -s \
     --unix-socket  /var/run/docker .sock \
     http: /services ?filters= '\{"name":\["' ${service_name} '"\]\}'  \
     |jq  '.'
     
3)使用 curl -g 参数来允许 URL 中使用  {}[] 而不用转义
        -g, --globoff
               This option switches off the  "URL globbing parser" . When you  set  this option, you can specify URLs that contain the letters {}[] without  having  them  being  inter‐
               preted by curl itself. Note that these letters are not normal legal URL contents but they should be encoded according to the URI standard.
 
 
实例
~]$ curl  "127.0.0.1:10001/services?filters=\{\"name\":\[\"${service_name}\"\]\}"
GET  /services ?filters={ "name" :[ "t001" ]} HTTP /1 .1
 
~]$ curl 127.0.0.1:10001 /services ?filters= '\{"name":\["' ${service_name} '"\]\}'
GET  /services ?filters={ "name" :[ "t001" ]} HTTP /1 .1
     
~]$ curl -g 127.0.0.1:10001 /services ?filters= '{"name":["' ${service_name} '"]}'
GET  /services ?filters={ "name" :[ "t001" ]} HTTP /1 .1