-
Notifications
You must be signed in to change notification settings - Fork 0
/
curl_usage.txt
282 lines (163 loc) · 8.77 KB
/
curl_usage.txt
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
112.97963262,26.23061746
linux下curl简单应用详解 (2013-10-13 17:09:07)
POST方法必须把数据和网址分开,curl就要用到--data参数。
$ curl -X POST --data "data=xxx" example.com/form.cgi
如果你的数据没有经过表单编码,还可以让curl为你编码,参数是`--data-urlencode`。
$ curl -X POST --data-urlencode "date=April 1" example.com/form.cgi
//restful test by curl
curl -H "Content-Type: application/json" \
-X POST \
-d '{"name":"Albina Press", "address": " 5012 Southeast Hawthorne
Boulevard, Portland, OR", "zipcode": 97215, "price": 2,
"max_seats": 40, "power": true, "wifi": true}' \
http://localhost:8080/api/coffeeshops/
curl -H "Content-Type: application/json" \
-X POST \
-d '{"user_name":"mb01", "passwd": "123456"}' \
http://jos.cninone.com/index.php?route=api/seller_login/tmb_login/
Curl是Linux下一个很强大的http命令行工具,其功能十分强大。
1) 直接获取url对应网页代码
$ curl http://www.linuxidc.com
回车之后,www.linuxidc.com 的html就稀里哗啦地显示在屏幕上了 ~
2) 保存网页内容到本地
$ curl http://www.linuxidc.com > page.html
用curl的内置option就好,存下http的结果,用这个option: -o
$ curl -o page.html http://www.linuxidc.com
这样,你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%,自然就 OK咯
3) 指定代理
使用curl的时候,用这个option可以指定http访问所使用的proxy服务器及其端口: -x
$ curl -x 123.45.67.89:1080 -o page.html http://www.linuxidc.com
4) 获取并保存cookies
option: -D
把http的response里面的cookie信息存到一个特别的文件中去
$ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com
这样,当页面被存到page.html的同时,cookie信息也被存到了cookie0001.txt里面了
5)使用保存的cookies
使用这个option来把上次的cookie信息追加到http request里面去: -b
$ curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.linuxidc.com
这样,我们就可以几乎模拟所有的IE操作,去访问网页了!
6)添加浏览器信息
指定自己这次访问所宣称的自己的浏览器信息的option: -A
$ curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com
模拟一个运行在Windows 2000上的 IE6.0,访问服务器
"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"
则可以告诉对方你是一台 PC上跑着的Linux,用的是Netscape 4.73
7)指定referer
服务器端常用的限制方法,就是检查http访问的referer。
比如你先访问首页,再访问里面所指定的下载页,
这第二次访问的 referer地址就是第一次访问成功后的页面地址。
这样,服务器端只要发现对下载页面某次访问的referer地址不是首页的地址,就可以断定那是个盗链
设定referer的option: -e
$ curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e "mail.linuxidc.com" -o page.html -D cookie0001.txt http://www.linuxidc.com
这样,就可以骗对方的服务器,你是从mail.linuxidc.com点击某个链接过来的
8)利用curl下载文件
下载页面到一个文件里,可以使用 -o ,下载文件也是一样。比如,
$ curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
一个新的option:-O 大写的O,这么用:
$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
这样,就可以按照服务器上的文件名,自动存在本地了!
如果screen1.JPG以外还有screen2.JPG、screen3.JPG、....、screen10.JPG需要下载,
在curl里面,这么写就可以了:
$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG
9)下载多个目录下的文件
$ curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG
这样产生的下载,就是
~zzh/001.JPG
~zzh/002.JPG
...
~zzh/201.JPG
~nick/001.JPG
~nick/002.JPG
...
~nick/201.JPG
由于zzh/nick下的文件名都是001,002...,201,下载下来的文件重名,后面的把前面的文件都给覆盖掉了
$ curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG
自定义出来下载下来的文件名,就变成了这样:
原来: ~zzh/001.JPG --- 下载后: 001-zzh.JPG
原来: ~nick/001.JPG --- 下载后: 001-nick.JPG
这样一来,就不怕文件重名
9)断点续传与分块下载
断点续传option: -c
比如我们下载screen1.JPG中,突然掉线了,我们就可以这样开始续传
$ curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG
分块下载option: -r
比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下载
我们就可以用这样的命令:
$ curl -r 0-10240 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
$ curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
$ curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
$ curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3
这样就可以分块下载啦。
不过你需要自己把这些破碎的文件合并起来如果你用UNIX或苹果,
用 cat zhao.part* > zhao.mp3就可以
如果用的是Windows,用copy /b 来解决吧
上面讲的都是http协议的下载,其实ftp也一样可以用。
$ curl -u name:passwd ftp://ip:port/path/file
或者大家熟悉的
$ curl ftp://name:passwd@ip:port/path/file
10) 上传文件
上传的option是 -T
对于ftp服务器,使用 -u 指定用户名与密码
比如我们向ftp传一个文件:
$ curl -T localfile -u name:passwd ftp://upload_site:port/path/
当然,向http服务器上传文件也可以比如
$ curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi
注意,这时候,使用的协议是HTTP的PUT method
http提交一个表单,比较常用的是POST模式和GET模式
GET模式什么option都不用,只需要把变量写在url里面就可以了比如:
$ curl http://www.linuxidc.com/login.cgi?user=nickwolfe&password=12345
而POST模式的option则是 -d
比如,
$ curl -d "user=nickwolfe&password=12345" http://www.linuxidc.com/login.cgi
就相当于向这个站点发出一次登陆申请
到底该用GET模式还是POST模式,要看对面服务器的程序设定。
一点需要注意的是,POST模式下的文件上的文件上传,比如
<form method="POST" enctype="multipar/form-data" action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">
<input type=file name=upload>
<input type=submit name=nick value="go">
</form>
这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法:
$ curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi
其实curl连接https的时候使用本地证书,就可以这样
$ curl -E localcert.pem https://remote_server
再比如,你还可以用curl通过dict协议去查字典 ~
$ curl dict://dict.org/d:computer
curl -H "Content-Type: application/json" \
-X POST -d '{"num":1}' \
http://192.168.1.20:4444/ts_open_a
curl -H "Content-Type: application/json" \
-X POST -d '{"num":1}' \
http://192.168.1.20:4444/ts_open_b
curl -H "Content-Type: application/json" \
-X POST -d '{"num":1}' \
http://192.168.1.20:4444/ts_open_a_const
curl http://192.168.1.20:4444/ts_open_b
/*
"cocos2d" : [
"core", "kazmath", "shaders", "render-texture", "motion-streak", "node-grid",
"clipping-nodes", "effects", "shape-nodes", "actions", "actions3d",
"progress-timer", "transitions", "labels", "compression", "particle",
"text-input", "menus", "tilemap", "parallax", "audio"
]
*/
curl -H "Content-Type: application/json" \
-X POST -d '{"num":1}' \
http://192.168.1.20:4444/ts_open_a_const
curl http://192.168.1.20:4444/ts_open_b
cat req.xml | curl -X POST -H 'Content-type: text/xml' -d @- http://www.example.com
or
curl -X POST -H 'Content-type: text/xml' -d @req.xml http://www.example.com
or
curl -X POST -H 'Content-type: text/xml' -d '<XML>data</XML>' http://www.example.com
https://deltacloud.apache.org/curl-examples.html
curl -H "Content-Type: application/json" \
-X POST -d '{"type":"3", "code":"clzh00001906"}' \
http://192.168.0.251:6080/index.php?route=api/use_ticket
curl -o /dev/null -s -w %{time_total} http://www.baidu.com
curl -o /dev/null -s -w "%{time_connect}+%{time_starttransfer}=%{time_total}" http://ny.cninone.com
curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' \
-o /dev/null http://ny.cninone.com
curl -H "Content-Type: application/json" \
-s -w "\n耗时:%{time_total}" \
-X POST -d '{"ts_no":"front door", "type":"3", "code":"clzh00001906"}' \
http://ny.cninone.com/index.php?route=api/use_ticket/check_ticket