前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >curl 命令常用场景

curl 命令常用场景

作者头像
Yorkyu
发布2022-03-22 15:40:10
5350
发布2022-03-22 15:40:10
举报
文章被收录于专栏:约克编程技术
blog/20201030072137_f1e70036ab2957d97d13318e27ee89a3.png
blog/20201030072137_f1e70036ab2957d97d13318e27ee89a3.png

一,curl 简介

curl 是常用的命令行工具,可基于网络协议,对指定 URL 进行网络传输。支持的通信协议有 DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SBMS, SMTP, SMTPS, TELNET 和 TFTP。

1.1. 语法

代码语言:javascript
复制
$ curl [选项] [url]

1.2. 参数

代码语言:javascript
复制
# 调试类
-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 的文件位置

curl 命令向 www.qq.com 发出 GET 请求,服务器返回的内容会在命令行输出。

代码语言:javascript
复制
$ curl http://www.qq.com

二,curl 使用场景

由于 curl 功能非常强大,命令行参数多达几十种,不易记忆。固作者将常用场景进行了收集记录。

2.1. 分析请求耗时

curl 命令分析请求耗时的示列

  • 打印输出信息格式

-w 选项,可以从文件读取要打印信息的格式,如下定义文件 curl-w.txt 内容:

代码语言:javascript
复制
\n
http_code:  %{http_code}\n
content_type:  %{content_type}\n
time_namelookup:  %{time_namelookup}\n
time_connect:  %{time_connect}\n
time_appconnect:  %{time_appconnect}\n
time_pretransfer:  %{time_pretransfer}\n
time_redirect:  %{time_redirect}\n
time_starttransfer:  %{time_starttransfer}\n
speed_download:  %{speed_download}\n
speed_upload:  %{speed_upload}\n
size_download:  %{size_download}\n
size_upload:  %{size_upload}\n
----------\n
time_total:  %{time_total}\n
\n
  • 变量含义
代码语言:javascript
复制
http_code :上一次 HTTP 或 FTP 数据传输过程中的 response 数值代码。

content_type :被请求访问的文件的 Content_Type 类型。 

time_namelookup :从数据传输开始到域名解析完成所花费的时间,即DNS解析时间。

time_connect :TCP连接建立成功所花费的时间。 

time_appconnect :应用层协议,如 SSL/SSH、三次握手等过程完成所花费的时间。

time_pretransfer :从请求开始到响应开始传输的时间 

time_redirect :从跳转链接被激活到真正开始从跳转链接下载数据所经过的时间。 

time_starttransfer :从请求连接开始,到第一个字节被传送前所经过的时间。

speed_download :整个数据传输过程中的平均数据下载速度。 

speed_upload :整个数据传输过程中的平均数据上传速度。 

size_download :数据传输过程中下载的总数据大小。

size_upload :数据传输过程中上传的总数据大小。

time_total :数据传输消耗的总时间,以秒为单位,精度为毫秒。 

# TCP 连接时间 = time_pretransfter - time_namelookup

# 服务器处理时间 = time_starttransfter - time_pretransfer

# 内容传输时间 = time_total - time_starttransfer
  • 发送 curl 请求
代码语言:javascript
复制
$ curl https://www.qq.com -w "@curl-w.txt" -o /dev/null -s

-w:从文件中读取要打印信息的格式

-o /dev/null:把响应的内容丢弃,因为我们这里并不关心它,只关心请求的耗时情况

-s:不要打印进度条

2.2. GET 请求

curl 命令发送 GET 请求示列

代码语言:javascript
复制
$ curl -v https://apinew.juejin.im/tag_api/v1/query_category_briefs?show_type=0

# -G 用来发送 GET 请求,-d, 查询参数
$ curl -G -d 'show_type=0' -d 'b=2' https://apinew.juejin.im/tag_api/v1/query_category_briefs

# --data-urlencode 进行 URL 编码
$ curl -v  -G -d 'show_type=0' --data-urlencode 'b=2 3  4' https://apinew.juejin.im/tag_api/v1/query_category_briefs

2.3. POST 请求

curl 命令发送 POST 请求示列

代码语言:javascript
复制
# -d 参数发送参数,默认 Content-Type : application/x-www-form-urlencoded
$ curl -d "id_type=2"  https://apinew.juejin.im/recommend_api/v1/article/recommend_all_feed

# 设置请求头
$ curl -d '{"id_type":2,"client_type":2608,"sort_type":200,"cursor":"0","limit":20}' -H "Content-Type: application/json" -v --trace-ascii /dev/stdout  https://apinew.juejin.im/recommend_api/v1/article/recommend_all_feed

# -d 参数可以读取本地文本文件的数据
$ curl -d '@data.json' -H "Content-Type: application/json" --trace-ascii /dev/stdout https://apinew.juejin.im/
  • --trace-ascii /dev/stdout 显示详细的请求过程,输出到命令端。--trace-ascii output.txt 输出到文件

2.4. 模拟网络环境

--limit-rate 用来限制 HTTP 请求和回应的带宽,模拟慢网速的环境。

代码语言:javascript
复制
# 将带宽限制在每秒 1K 字节
$ curl -d "id_type=2" --limit-rate 1k  https://apinew.juejin.im/recommend_api/v1/article/recommend_all_feed

2.5. 传 Cookie

-b 命令读取 Cookie 数据,并携带到请求头,模拟用户登陆,保持会话

代码语言:javascript
复制
$ curl -b ./cookie.txthttps://apinew.juejin.im/interact_api/v1/message/count

2.6. 下载保存

代码语言:javascript
复制
$ curl https://www.qq.com > qq.html

$ curl -o qq.html https://www.qq.com

$ curl -O http://mydomain.net/target.tar.gz

2.7. 使用代理

代码语言:javascript
复制
# 指定 HTTPS 请求通过 `127.0.0.1:8080` 代理发出
$ curl -x 127.0.0.1:8080 https://www.qq.com

2.8. 批量发送请求

代码语言:javascript
复制
for i in {0..100}; do curl -X GET  https://www.qq.com -o /dev/null ;  done

2.9. 上传文件

-F 参数用来向服务器上传二进制文件,会给 HTTP 请求加上标头 Content-Type: multipart/form-data,然后将文件 photo.png 作为 file 字段上传

代码语言:javascript
复制
curl -F 'file=@photo.png' https://google.com/profile

# 指定 MIME 类型为 image/png
$ curl -F 'file=@photo.png;type=image/png' https://google.com/profile

# 指定文件名服务器中的文件名,原始文件名为 photo.png,但是服务器接收到的文件名为me.png
$ curl -F 'file=@photo.png;filename=me.png' https://google.com/profile

2.10. 免配 hosts

代码语言:javascript
复制
$ curl -v -H "Host: www.qq.com" http://127.0.0.1:4000

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年10月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一,curl 简介
    • 1.1. 语法
      • 1.2. 参数
      • 二,curl 使用场景
        • 2.1. 分析请求耗时
          • 2.2. GET 请求
            • 2.3. POST 请求
              • 2.4. 模拟网络环境
                • 2.5. 传 Cookie
                  • 2.6. 下载保存
                    • 2.7. 使用代理
                      • 2.8. 批量发送请求
                        • 2.9. 上传文件
                          • 2.10. 免配 hosts
                          • 参考
                          相关产品与服务
                          命令行工具
                          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档