1. 查看网页源码
$ curl [URL] //eg: curl ibit.tech
如果需要将网页保存下来,可以通过-o
参数,这个相当于使用wget
命令。
$ curl -o [文件名] [URL] //eg: curl -o ibit-tech.html ibit.tech
2. 自动跳转
使用-L
自动跳转到新的网址
$ curl -L [URL] //eg: curl -L http://ibit.tech,会自动跳转到 https://ibit.tech
3. 显示头信息
-i
参数显示http response,头部信息
$ curl -i [URL]
eg:
$ curl -i ibit.tech
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Tue, 26 Dec 2017 08:53:05 GMT
Content-Type: text/html
Content-Length: 3693
Last-Modified: Tue, 26 Dec 2017 07:11:06 GMT
Connection: keep-alive
ETag: "5a41f60a-e6d"
Accept-Ranges: bytes
//省略html源码
-I
参数则是只显示http response的头信息。
4. 显示通信过程
-v
参数显示一次http通信的整个过程,包括端口连接和http request头信息
$ curl -v [URL]
eg:
$ curl -v ibit.tech
* Rebuilt URL to: ibit.tech/
* Trying 39.106.33.200...
* TCP_NODELAY set
* Connected to ibit.tech (39.106.33.200) port 80 (#0)
> GET / HTTP/1.1
> Host: ibit.tech
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.12.2
< Date: Tue, 26 Dec 2017 08:58:52 GMT
< Content-Type: text/html
< Content-Length: 3693
< Last-Modified: Tue, 26 Dec 2017 07:11:06 GMT
< Connection: keep-alive
< ETag: "5a41f60a-e6d"
< Accept-Ranges: bytes
<
//省略html源代码
更加详情的内容,打印到文件
$ curl --trace [文件名] [URL] //eg: curl --trace ibittech.txt ibit.tech
或者
$ curl --trace-ascii [文件名] [URL] //eg: curl --trace-ascii ibittech.txt ibit.tech
ibittech.txt 部分内容
== Info: Trying 39.106.33.200...
== Info: TCP_NODELAY set
== Info: Connected to ibit.tech (39.106.33.200) port 443 (#0)
== Info: ALPN, offering h2
== Info: ALPN, offering http/1.1
== Info: successfully set certificate verify locations:
== Info: CAfile: /etc/ssl/cert.pem
CApath: none
== Info: TLSv1.2 (OUT), TLS handshake, Client hello (1):
=> Send SSL data, 223 bytes (0xdf)
0000: .......az0B1...&rB...4...A|.............\.0.,.(.$.......k.9.....
0040: ............=.5...../.+.'.#.......g.3...E...<./...A.............
0080: ........V.........ibit.tech.....................................
00c0: ....................h2.http/1.1
== Info: TLSv1.2 (IN), TLS handshake, Server hello (2):
5. 发送表单信息
通过GET
方法
$ curl [URL][?p1=v1&p2=v2] //eg: curl ibit.tech?timestamp=12367
通过POST
方法, --data
简化为-d
$ curl -X POST -d "p1=v1&p2=v2..." [URL] //eg: curl -X POST -d 'timestamp=12345' ibit.tech
等价于:
$ curl -d "p1=v1&p2=v2..." [URL] //`Content-Type: application/x-www-form-urlencoded`
使用POST
方法,默认加上头信息:"Content-Type: application/x-www-form-urlencoded"
如果数据没有编码,使用--data-urlencode
$ curl -X POST --data-urlencode "p1=v1&p2=v2..." [URL]
使用POST
发送json
$ curl -H 'Content-Type:application/json' -d '[JSON string]' [URL]
6. HTTP动词
curl 默认的HTTP动词是GET,使用-X
参数可以支持其他动词。
$ curl -X POST [URL] //eg: curl -X POST ibit.tech
$ curl -X DELETE [URL] //eg: curl -X DELETE ibit.tech
7. 文件上传
假定文件上传表单为:
<form method="POST" enctype='multipart/form-data' action="#">
<input type=file name=file>
<input type=submit name= submit value="OK">
</form>
curl上传文件,使用--form
或者-F
,文件名前面记得加"@"
$ curl --form file=@[文件名] --form submit =OK [URL]
文件上传会增加头信息 "Content-Type: multipart/form-data;"
8. Referer字段
使用--referer
或者-e
参数
$ curl --referer [Referer URL] [URL]
9. User Agent字段
使用--user-agent
或者 -A
参数
$ curl --user-agent "[User Agent]" [URL]
10. cookie
使用--cookie
或者 -c
参数
$ curl --cookie "cn=cv" [URL] //eg: curl -c 'sid=xxx' ibit.tech
-c cookie-file
可以保存服务器返回的cookie到文件(服务器返回Set-Cookie
头部信息),-b cookie-file
可以使用这个文件作为cookie信息,进行后续的请求。
$ curl -c [Cookie 文件] [URL]
$ curl -b [Cookie 文件] [URL]
11. 增加头部信息
使用--header
或者-H
参数
$ curl -H "hn: hv" [URL] //eg: curl -X POST -H 'Content-Type: application/json' -d '' ibit.tech
12. HTTP认证
使用--user
或者 -u
参数
$ curl -u name:password [URL]