简介
Curl 是一个命令行工具,用来请求Web服务器。适用于各种无图形化界面的服务器端,例如跳板机/堡垒机访问服务接口。
安装
linux环境
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install curl
# CentOS
sudo yum update
sudo yum install curl
curl --version
macOS环境
brew install curl
curl --version
windows环境
- 直接官网下载安装 https://curl.se/download.html,添加PATH环境变量即可。
- 利用docker运行,
docker run --rm alpine curl --version
,–rm 标志表示容器在运行完毕后会自动删除。
使用
默认参数、-G->GET请求
默认即位GET请求,访问网页获取网页html,访问接口获取json。
curl https://example.com
# 构造URL的查询字符串并进行URL编码
curl -G --data-urlencode 'comment=hello world' https://www.example.com
-X->指定HTTP请求的方法,POST请求
# POST请求
curl -X POST https://www.example.com
# DELETE请求
curl -X DELETE https://www.example.com
-d->用于发送POST请求的数据体,自动将请求转为POST方法,因此可以省略-X POST
curl -d 'login=emma&password=123' -X POST https://www.example.com/login
# 读取本地文本文件的数据,向服务器发送
curl -d '@data.txt' https://www.example.com/login
# 数据进行URL编码,向服务器发送
curl --data-urlencode 'comment=hello world' https://www.example.com/login
-H->添加HTTP请求的标头
curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://www.example.com
curl -H 'accesstoken: xxxx' https://www.example.com
curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://www.example.com/login
curl -H "Authorization: Bearer token123" http://example.com/resource
curl --header "Content-Type:application/json" https://example.com
-b->发送Cookie
# 发送单个Cookie
curl -b "cookie_name=cookie_value" https://www.example.com
curl --cookie "cookie_name=cookie_value" https://www.example.com
# 发送多个Cookie
curl -b "cookie1=value1; cookie2=value2" https://www.example.com
# 从文件中读取Cookies
curl -b cookies.txt https://www.example.com
-i、-I->显示HTTP响应头信息
# 只显示响应头,等同于发起HEAD请求,一般用于服务健康检测
curl -I https://www.example.com
curl --head https://www.example.com
# 显示响应头以及结果
curl -i https://www.example.com
-A->指定客户端的用户代理标头,即User-Agent
curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.199 Safari/537.36' https://www.example.com
curl --user-agent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.199 Safari/537.36' https://www.example.com
-v->输出通信的整个过程
curl -v https://www.example.com
-x->指定HTTP请求的代理
# 使用HTTP代理,默认为HTTP
curl -x https://proxy.example.com:8080 https://example.com
# 使用SOCKS5代理
curl -x socks5://proxy.example.com:1080 https://example.com
curl --socks5-hostname proxy.example.com:1080 https://example.com
-o、-O->保存下载,类似wget命令
- 下载文件到当前目录
curl -O https://example.com/file.zip
- 指定本地文件名下载
curl -o local_file.zip http://example.com/file.zip
-L->请求跟随服务器的重定向,curl默认不跟随重定向
curl -L https://example.com
-F->文件上传
# 上面命令会给HTTP请求加上标头Content-Type: multipart/form-data,然后将文件local_file.txt作为file字段上传
curl -F "file=@local_file.txt" https://example.com/upload
# 设置MIME文件类型,curl默认MIME类型为application/octet-stream
curl -F "file=@local_file.txt;type=text/plain" https://example.com/upload
# 指定文件名,服务器接收到的文件名为ddf.txt
curl -F 'file=@local_file.txt;filename=ddf.txt' https://example.com/upload
# 上传多个
curl -F "file1=@file1.txt" -F "file2=@file2.jpg" https://example.com/upload
-c->将服务器设置的Cookie写入一个文件
curl -c cookies.txt https://www.example.com
-e->设置HTTP的标头Referer
curl -e 'https://google.com?q=example' https://www.example.com
-k->跳过SSL检测
curl -k https://www.example.com