curl命令详解
curl命令简介
curl是一个非常强大的工具,它不仅可以下载网上文件,更重要的是它是用来与服务器之间传输数据的,其支持的协议包括 DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET,TFT这些协议
curl还提供了支持代理访问、用户认证、ftp上传下载、http请求等功能
curl命令和选项
语法:curl【选项】【url地址】
选项和参数:
- -o, --output:将信息输出到文件
- -O, --remote-name:按照服务器上的文件名,存在本地
- -L:自动跟随重定向(HTTP 3xx)。
- -X:指定请求方式POST还是GET,默认GET
- -x, --proxy:指定代理服务器地址和端口
- -v:显示一次http通信的整个过程,包括端口连接和http request头信息。
- -H:指定请求头信息
- -s, --slient:减少输出信息
- -u, --user[user:pass]:设置http认证用户和密码
- –l, --head:仅返回头部信息
- -c, --cookie-jar:将cookie写入到文件
- -b, --cookie:从文件中读取cookie
- -C, --continue-at:断点续传
- -d, --data:http post方式传送数据
- -D, --dump-header:把header信息写入到文件
- -F, --from:模拟http表达提交数据
- -T, --upload-file:上传文件
- -e, --referer:指定引用地址
- -w, --write-out:输出指定格式内容
- -m:设置整个请求的最大执行时间
- –retry:重试次数
- –connect-timeout:指定尝试连接的最大时间/s
常用操作
访问页面
常规获取网页内容。
命令格式:
curl <URL地址>
【示例】
curl https://www.baidu.com
1.用户认证
访问http认证页面使用-u选项输入用户名:密码。
命令格式:
curl -u <用户名:密码> <URL地址>
【示例】
curl –u username:password http://www.example.com
2.查看请求头
使用-I选项查看请求头信息
命令格式:
curl -I <URL地址>
【示例】
curl -I https://www.baidu.com
3.显示详细调试信息
使用-v选项可以显示详细的调试请求信息,包括请求和响应信息。
命令格式:
curl -v <URL地址>
【示例】
curl -v https://www.baidu.com
文件下载
1.普通下载
使用-O或者-o选项重定向输出来下载文件。
按照网络上的文件原名字下载到本地。
命令格式:
curl -O <URL地址>(精确到文件名)
【示例】
curl -O https://www.example.com/release/pakge.tgz
下载文件下来并重命名该文件,也可用于指定下载位置。
命令格式:
curl -o <新文件名> <URL地址>(精确到文件名)
【示例】
curl -o package.tar.gz https://www.example.com/release/pakge.tgz
同一页面有多个文件需要下载可以用以下方法循环下载。
命令格式:
curl -O <URL地址>/前缀重复名[循环范围].文件后缀
【示例】
curl -O https://www.example.com/abc[1-5].jpeg
使用-s选项下载不显示进度条
命令格式:
curl -s -O <URL地址>
【示例】
# 不显示进度条
curl -s -O http://www.linux.com/dodo1.JPG
2.分块下载
如果文件的size比较大的话可以通过-r选项来进行分块下载,-r后面跟范围,单位是字节。
命令格式:
curl -r <大小范围> -o 阶段文件名 <URL地址>(精确到文件名)
【示例】将文件分为三份大小进行下载
curl -r 0-100 -o file_part1 https://www.example.com/release/dhusdg234.jpeg
curl -r 100-200 -o file_part2 https://www.example.com/release/dhusdg234.jpeg
curl -r 200- -o file_part3 https://www.example.com/release/dhusdg234.jpeg
# 通过cat来合并块文件组成dhusdg234.jpeg文件
cat file_part* > dhusdg234.jpeg
3.ftp下载
curl可以通过ftp下载文件,
命令格式:
curl -O -u <用户名:密码> ftp://<ftp地址>/<文件路径>
# 或者第二种方式
curl -O ftp://<用户名:密码>@<ftp地址>/<文件路径>
【示例】命令分为两种格式,如下所示:
curl -O -u username:password ftp://192.168.100.101/photos/15754325.png
curl -O ftp://username:password@192.168.100.101/photos/15754325.png
4.断点续传
只需要使用-C选项就可以使用断点续传,从文件头的指定位置开始继续下载/上传,offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输。
命令格式:
curl -C -O <URL地址>(精确到文件名)
【示例】
curl -C -O http://www.example.com/release/pakge.tgz
高级应用
设置来源页面(referer)
可以使用-e选项来伪造来源页面
命令格式:
curl -e <伪造地址> <URL地址>
【示例】比如:告诉www.example.com我是www.aaa.com
curl -e http://www.aaa.com http://www.example.com
模仿浏览器
curl内置-A选项可以让我们设置User-Agent请求头。
命令格式:
curl -A <请求头值> <URL地址>
【示例】
curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36" http://www.example.com
设置代理
通过-x或者--proxy选项来设置代理。
命令格式:
curl -x <代理地址> <URL地址>
【示例】
curl -x http://127.0.0.1:1080 http://www.google.com
忽略HTTPS证书验证
通过-k或者--insecure选项可以忽略HTTPS证书校验。
命令格式:
curl -k <URL地址>
【示例】
curl -k https://www.example.com
使用客户端证书认证
通过--cert <证书文件>选项使用客户端证书,--key <证书密钥文件>选项使用客户端密钥进行认证
命令格式:
curl <选项> <URL地址> --cert <客户端证书文件> --key <客户端证书密钥文件>
【示例】
curl -k -vo /dev/null https://www.example.com/ --cert ./certs/client.crt --key ./certs/client.key
修改模拟DNS解析
可以使用--resolve <解析域名:端口:IP地址>参数来模拟实现域名解析修改测试访问域名。
命令格式:
curl <选项> <URL地址> --resolve <解析域名>:<端口>:<解析ip地址>
【示例】
curl https://www.example.com/ --resolve www.example.com:443:127.0.0.1
修改返回信息输出格式
可以通过-w选项来按照自己想要的输出格式返回信息。
命令格式:
curl -w "<修改的输出格式内容>" <URL地址>
【示例】
curl -o /dev/null -I -s -w "网页状态码: %{http_code}" https://www.baidu.com
网页状态码: 200 # 返回结果
网络与连接参数
限速下载
使用--limit-rate=<速度>选项可以限制网络下载速度,支持单位k/m。
命令格式:
curl <选项> --limit-rate=<限制速度,单位k/m> <URL地址>
【示例】
curl -O --limit-rate=200k https://www.example.com/file.zip
重试次数
使用--retry <次数>选项设置重试次数,超过次数则不重试报错失败,默认为20
命令格式:
curl --retry <次数> <URL地址>
【示例】
curl --retry 5 https://www.example.com
也可以使用--retry-delay <时间:秒>选项来设置重试之间间隔时间。
命令格式:
curl --retry <次数> --retry-delay <时间:秒> <URL地址>
【示例】
curl --retry 5 --retry-delay 3 https://www.example.com
还可以使用--retry-max-time <时间:秒>选项来限制重试的总时间,超过这个时间就算还有次数也不再重试。
命令格式:
curl --retry <次数> --retry-max-time <时间:秒> <URL地址>
【示例】
curl --retry 10 --retry-max-time 60 https://www.example.com
超时时间
使用--connect-timeout <时间:秒>选项设置建立连接的超时时间(即 TCP 三次握手时间)。
命令格式:
curl --connect-timeout <时间:秒> <URL地址>
【示例】
curl --connect-timeout 10 https://example.com
还可以使用-m <时间:秒>或者--max-time <时间:秒>选项设置整个请求的最大执行时间(连接 + 传输),超过时间会直接退出。
命令格式:
curl -m <时间:秒> <URL地址>
【示例】
curl -m 30 https://www.example.com
curl实现请求操作
常见请求
发送请求方法可以通过-X <请求方法>选项来指定请求方法。
GET请求
发送GET请求。
命令格式:
curl <URL地址>
# 或者另外方式
curl -X GET <URL地址>
【示例】
curl http://www.example.com/api
curl -X GET http://www.example.com/api
POST请求
发送POST请求。
命令格式:
curl -X POST -d <请求数据参数> <URL地址>
【示例】
curl -X POST -d 'name=admin&data=dshudsh' http://www.example.com/api
发送json格式请求。
命令格式:
# 传递json请求体数据
curl -H "Content-Type: application/json" -X POST -d <请求体数据> <URL地址>
# 指定文件
curl -H "Content-Type: application/json" -X POST -d @<文件位置>(精确到文件名) <URL地址>
【示例】
# 传递json请求体
curl -H "Content-Type: application/json" \
-X POST -d '{"a":123,"b":"wjidhg2"}' \
http://www.example.com/api
# 指定json文件
curl -H "Content-Type: application/json" \
-X POST -d @data.json \
http://www.example.com/api
补充说明:
-X设置请求方法,-H或者--为设置请求头(可重复指定多个),-d则是传递数据(可重复指定多个),通常使用这几个参数使用curl发起请求。
设置cookie
可以通过-b来设置传递cookie信息。
命令格式:
curl -b <cookie数据> <URL地址>
【示例】
curl -b "session_id=wqmkfwi38dvst229dmkjd" http://www.example.com/api
保存http请求response的cookie信息。
命令格式:
curl -c <记录cooike数据文件> <URL地址>
【示例】
curl -c cookie.txt http://www.example.com
使用保存的cookie信息。
命令格式:
curl -b <记录cooike数据文件> <URL地址>
【示例】
curl -b cookiec.txt http://www.example.com