curl 不仅仅是一个编程时可以包含的函数库,也是一个功能强大的网站开发工具。仅仅使用其原生命令,就可以实现大部分网络爬虫的功能。
curl 的使用
url
将要请求的 url, 必须填写的参数.
默认的请求类型为 GET, 默认输出到标准输出
curl http://httpbin.org/get-C, –continue-at
使下载支持断点续传, 需要指定偏移量或者 - 自动计算
curl https://httpbin.org/download.zip -O -C -如果下载中途中断了, 则可以再次执行此命令来进行续传
-b, –cookie
使用指定的 cookie 请求页面
从
-c导出的文件(cookie.txt)中读取curl http://httpbin.org/cookies -b @cookie.txt使用 cookie 字符串
curl http://httpbin.org/cookies -b 'key=value'
-c, –cookie-jar
将 cookie 保存到指定的文件
curl http://httpbin.org/cookies/set/key/value -c cookie.txt-d, –data
请求中的 POST 数据, 添加此参数后默认请求类型变为 POST
curl http://httpbin.org/post -d 'key1=value1&key2=value2&key2=value3'
{
"key1": "value1",
"key2": ["value2", "value2"]
}
curl http://httpbin.org/post -d 'key1=value1' -d 'key2=value2' -d 'key2=value3'
{
"key1": "value1",
"key2": ["value2", "value2"]
}–data-ascii
类似于 -d, 暂时没有发现区别
–data-urlencode
类似于 -d, 参数中的 ‘&’ 会被转义, 不会切断参数
curl http://httpbin.org/post --data-urlencode 'key1=value1&key2=value2&key2=value3'
{
"key1": "value1&key2=value2&key2=value3"
}
curl http://httpbin.org/post --data-urlencode 'key1=value1' --data-urlencode 'key2=value2' --data-urlencode 'key2=value3'
{
"key1": "value1",
"key2": ["value2", "value2"]
}-F, –form
指定 multipart MIME 数据, 可以用来上传文件
curl http://httpbin.org/post -F file=@filename–form-string
以 multipart MIME 格式上传数据
curl http://httpbin.org/post --form-string 'key=value'-G, –get
将请求的数据放在 URL 中, 以 GET 形式请求
curl meik$ curl http://httpbin.org/get -d 'key=value' -G-g, –globoff
忽略表示范围的 [] 和 {}
curl http://httpbin.org/cookies/set/key/value[1-5] -g关于 [] 和 {} 表示范围的用法, 可以查看下面的”拓展用法”部分
-I, –head
只请求头部信息, 使用的是 head 请求
curl http://httpbin.org/get -I可以通过 -v 选项来验证其使用的是 head 请求
curl http://httpbin.org/get -I -v
...
> HEAD /get HTTP/1.1
...-H, –header
添加自定义的 header 信息
curl http://httpbin.org/get -H 'Key: value'
curl http://httpbin.org/get -H @header.txt-0, –http1.0
使用 HTTP/1.0
curl http://httpbin.org/get -0–http1.1
使用 HTTP/1.1
curl http://httpbin.org/get --http1.1-i, –include
同时在 stdout 中显示响应的头部信息
curl http://httpbin.org/get -i-L, –location
自动进行页面跳转
curl http://httpbin.org/status/302 -L添加 -v 参数查看具体请求过程
curl http://httpbin.org/status/302 -L -v
> GET /status/302 HTTP/1.1
> Host: httpbin.org
>
< HTTP/1.1 302 FOUND
< Location: /redirect/1
<
> GET /redirect/1 HTTP/1.1
> Host: httpbin.org
>
< HTTP/1.1 302 FOUND
< Location: /get
<
> GET /get HTTP/1.1
> Host: httpbin.org
>
< HTTP/1.1 200 OK可以看出, 如果返回的仍然是一个重定向的话, 那么 curl 会继续请求
如果跳转的时候设置了 set-cookie, 那么此选项也不会在后续的请求中添加 cookie 信息
curl http://httpbin.org/cookies/set/key/value -L
{"cookies":{}}为了在跳转的页面中可以使用 cookie, 可以搭配使用 -c 和 -b 选项
curl http://httpbin.org/cookies/set/key/value -L -c cookie.txt -b @cookie.txt
{"cookies":{"key":"value"}}-o, –output
将请求到的数据保存为指定的文件
curl http://httpbin.org/get -o get.html-#, –progress-bar
下载时显示进度条
curl http://httpbin.org/download.zip -O -C - -#
##### 13.7%会隐藏其他信息, 显示一个 # 组成的进度条, 以及文件百分比
-x, –proxy
使用代理
curl https://www.google.com
(无响应)
^C
curl https://www.google.com -x http://127.0.0.1:6666
...(请求的结果)-e, –referer
设置 HTTP 头信息的 referer
curl http://httpbin.org/get -e 'http://httpbin.org'有些网站会验证 referer 字段
-O, –remote-name
将请求到的数据以 URL 中的路径为名保存到本地
curl http://httpbin.org/get -O请求到的数据会被保存到名为 get 的文件内
-X, –request
指定请求的类型
curl http://httpbin.org/post -X POST请求的类型可以为自定义的类型, 比如
curl http://httpbin.org/post -X POST666 -v
...
> POST666 /post HTTP/1.1
...-S, –show-error
在静默模式下也输出错误信息
-s, –silent
静默模式
trace
输出 debug 信息到文件
curl http://httpbin.org/get --trace trace.txttrace-ascii
输出 debug 信息到文件, 不包含 hex 数据
curl http://httpbin.org/get --trace-ascii trace.txttrace-time
为 trace 的输出时间
curl http://httpbin.org/get --trace-ascii trace.txt --trace-time–url
要请求的 URL
curl --url http://httpbin.org/get-A, –user-agent
修改请求的 UA
curl meik$ curl http://httpbin.org/get -A 'MeiK'
"User-Agent": "MeiK"-v, –verbose
让输出更加详细, 会额外输出请求 ip 、请求头、响应头等信息
curl http://httpbin.org/get -v-V, –version
输出版本信息和版本特性等信息
curl -V拓展用法
[] 与 {} 表示范围
用
{}表示多个 URLcurl http://httpbin.org/cookies/set/key/value{1,2,3}会访问三个 URL
用
[]表示范围curl http://httpbin.org/cookies/set/key/value[1-3] curl http://httpbin.org/cookies/set/key/value[a-z]如果你用过 Python 的话, 那应该对这种用法很熟悉
curl http://httpbin.org/cookies/set/key/value[1-10:2]冒号后边的部分是步长, 表示等差排列的阶跃数
混合使用
{}与[]curl http://httpbin.org/cookies/set/key{1,2,3}/value[1-3]会请求其每种组合(3*3=9)