基础
参考:
参数一览
# 调试类
-v, --verbose 输出信息
-q, --disable 在第一个参数位置设置后 .curlrc 的设置直接失效,这个参数会影响到 -K, --config -A, --user-agent -e, --referer
-K, --config FILE 指定配置文件
-L, --location 跟踪重定向 (H)
# CLI显示设置
-s, --silent Silent模式。不输出任务内容
-S, --show-error 显示错误. 在选项 -s 中,当 curl 出现错误时将显示
-f, --fail 不显示 连接失败时HTTP错误信息
-i, --include 显示 response的header (H/F)
-I, --head 仅显示 响应文档头
-l, --list-only 只列出FTP目录的名称 (F)
-#, --progress-bar 以进度条 显示传输进度
# 数据传输类
-X, --request [GET|POST|PUT|DELETE|…] 使用指定的 http method 例如 -X POST
-H, --header <header> 设定 request里的header 例如 -H "Content-Type: application/json"
-e, --referer 设定 referer (H)
-d, --data <data> 设定 http body 默认使用 content-type application/x-www-form-urlencoded (H)
--data-raw <data> ASCII 编码 HTTP POST 数据 (H)
--data-binary <data> binary 编码 HTTP POST 数据 (H)
--data-urlencode <data> url 编码 HTTP POST 数据 (H)
-G, --get 使用 HTTP GET 方法发送 -d 数据 (H)
-F, --form <name=string> 模拟 HTTP 表单数据提交 multipart POST (H)
--form-string <name=string> 模拟 HTTP 表单数据提交 (H)
-u, --user <user:password> 使用帐户,密码 例如 admin:password
-b, --cookie <data> cookie 文件 (H)
-j, --junk-session-cookies 读取文件中但忽略会话cookie (H)
-A, --user-agent user-agent设置 (H)
# 传输设置
-C, --continue-at OFFSET 断点续转
-x, --proxy [PROTOCOL://]HOST[:PORT] 在指定的端口上使用代理
-U, --proxy-user USER[:PASSWORD] 代理用户名及密码
# 文件操作
-T, --upload-file <file> 上传文件
-a, --append 添加要上传的文件 (F/SFTP)
# 输出设置
-o, --output <file> 将输出写入文件,而非 stdout
-O, --remote-name 将输出写入远程文件
-D, --dump-header <file> 将头信息写入指定的文件
-c, --cookie-jar <file> 操作结束后,要写入 Cookies 的文件位置
基础应用
Get请求
不带有任何参数时,curl 就是发出 GET 请求。
curl https://www.example.com
设置cookie
附带cookie请求
curl -b 'foo=bar' https://google.com
# 带多个cookie
curl -b 'foo1=bar' -b 'foo2=baz' https://google.com
# 读取文件里的cookie
curl -b cookies.txt https://www.google.com
将返回的cookie写入文件
curl -c cookies.txt https://www.google.com
Post-form请求
使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST。
curl -d 'login=emma&password=123'-X POST https://google.com/login
# 读取文件
curl -d '@data.txt' https://google.com/login
post-json请求
curl -H "Content-type:application/json" -X POST -d '{"threads_start":1,"threads_to":30}' http://127.0.0.1:9898
下载文件
# 下载并使用原始名称
curl -O http://www.mydomain.com/linux/index.html
# 下载并使用自定义名称
curl -o index.html http://www.mydomain.com/linux/index.html
# 断点续传 ,加C
curl -C -O http://www.sina.com.cn
登录并访问
# 登录
curl -c ./cookie_c.txt -F log=aaaa -F pwd=****** http://blog.mydomain.com/login.php
# 根据cookie,再请求页面
curl -b ./cookie_c.txt http://blog.mydomain.com/wp-admin
其他问题
如何支持https
默认的curl不支持https,重新安装即可。
首先我们先看一下curl支持什么协议
➜ curl -V
curl 7.65.3 (x86_64-pc-linux-gnu) libcurl/7.65.3 zlib/1.2.7
Release-Date: 2019-07-19
Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp
Features: AsynchDNS IPv6 Largefile libz UnixSockets
可以看到,协议里面没有https,我们下载安装
1、安装openssl
wget https://www.openssl.org/source/old/1.1.0/openssl-1.1.0f.tar.gz
tar -zxvf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f/
./config shared no-zlib --prefix=/opt/ssl --openssldir=/opt/ssl
make
sudo make install
2、安装curl
wget https://curl.haxx.se/download/curl-7.54.1.tar.gz
tar -zxvf curl-7.54.1.tar.gz
cd curl-7.54.1
LDFLAGS="-Wl,-rpath,/opt/ssl/lib -Wl,-rpath,/opt/lib \
-Wl,-rpath,/usr/local/lib" \
./configure --with-ssl=/opt/ssl --prefix=/opt
make
sudo make install
# 备份和软连接
sudo mv /usr/local/bin/curl /usr/local/bin/curl.back
sudo ln -s /opt/bin/curl /usr/local/bin/curl
# 测试
curl -V
这短短的一生我们最终都会失去,不放大胆一点,爱一个人、攀一座山、追一个梦!