Linux - curl 命令(下)

简介: Linux - curl 命令(下)

--data-raw(常用)

作用:POST 请求体,可以接收一个完整的 json 字符串

curl --location --request POST 'http://test.com/account.login?ver=1.0&df=json&cver=3.7.8&os=android' \
--header 'Content-Type: application/json' \
--data-raw '{
    "id":"123",
    "service":"account.login",
    "client":{
        "ve":"3.7.8",
        "os":"android",
        "si":"123",
        "ex":{
            "brand":"vivo",
            "dpfr":"8.1.0",
        },
        "empty":false
    },
    "data":{
        "ex":{
            "token":"123"
        }
    }
}'


-e

  • 价参数: --referer <URL>
  • 作用:设置 HTTP Headers 里面的 Referer,表示请求的来源
curl -v -e "test" http://baidu.com


image.png


-F

  • 等价参数: --form <name=content>
  • 作用:向服务器上传二进制文件
curl -F 'file=@photo.png' https://google.com/profile

自动给 HTTP Request Headers 加上 Content-Type: multipart/form-data ,然后将文件 photo.png 作为 file 字段的值上传

 

指定 MIME 类型

curl -F 'file=@photo.png;type=image/png' https://google.com/profile

指定 MIME 类型为 image/png ,否则 curl 会把 MIME 类型设为 application/octet-stream

 

指定文件名

curl -F 'file=@photo.png;filename=me.png' https://google.com/profile

服务器接收到的文件名为 me.png

 

-G

  • 等价参数: --get
  • 作用:构造 URL 的查询字符串
curl -v -G -d 'wd=biying' -d 'ie=UTF-8'  https://www.baidu.com/s

image.png


本来 -d 会让 HTTP 请求变成 POST,但因为加了 -G,仍然是 GET,因为是查询字符串

 

-H(常用)

  • 等价参数: --header <header/@file>
  • 作用:添加 HTTP 请求头
curl -v -H "token:123" -H "Content-type:application/json" http://baidu.com

image.png


-H 指定两个请求头字段,都加上了

 

-i

  • 等价参数: --include
  • 作用:打印 Responses Headers 和响应内容
curl  -i http://baidu.com

image.png


-I

  • 等价参数: --head
  • 作用:仅打印 Responses Headers
curl  -I http://baidu.com

image.png


-k

  • 等价参数: --insecure
  • 作用:跳过 SSL 检测
curl -k -I https://www.baidu.com



image.png

目测不加也能正常发起 HTTPS 的请求

 

-L

  • 等价参数: --location
  • 作用:让 HTTP 请求跟随服务器的重定向,curl 默认不跟随重定向
curl -L -d 'tweet=hi' https://api.twitter.com/tweet

建议都加上

 

--limit-rate

作用:限制 HTTP 请求和回应的带宽,模拟慢网速的环境

curl -v --limit-rate 2k http://baidu.com

将带宽限制在每秒 2K 字节

但我测试了下,感觉比较鸡肋,还是瞬间完成请求

 

-o

  • 等价参数: --output <file>
  • 作用:将服务器的 Responses 保存成文件,等同于 wget 命令
curl -o baidu.html  http://baidu.com


image.png


-O

  • 等价参数: --remote-name
  • 作用:将服务器 Responses 保存成文件,并将 URL 的最后部分当作文件名

image.png

-s

  • 等价参数: --silent
  • 作用:静默模式,将不输出错误和进度信息,不发生错误的话,会正常显示运行结果

image.png


-S

  • 等价参数: --show-error
  • 作用:只输出错误信息,会让 -s 参数不生效

常用组合技

curl -S -s https://google.com/login

如果正确,则正常输出,如果错误则只输出错误信息,不输出运行结果

 

-u

  • 等价参数: --user <user:password>
  • 作用:设置服务器认证的用户名和密码
curl -u 'bob:12345' https://google.com/login

 

-v

  • 等价参数: --verbose
  • 作用:输出通信的整个过程,用于调试

一路都是栗子,不再举栗子

 

--trace

作用:输出通信的整个过程,比 -v 更详细

不举栗子,因为是 16 进制的数据结果,直接看下面的 --trace-ascii,用法一样,输出的数据也一样,但是是用 10 进制显示

 

--trace-ascii

作用:输出通信的整个过程,比 -v 更详细,但没有十六进制输出,而是十进制

 

终极实际工作的栗子

为了更全面的看到请求的整个通信链路,直接用了我工作上一个接口,但我把敏感信息都换了,所以是请求不通的哈

curl  --trace-ascii - --location --request POST 'http://test.com/account.login?ver=1.0&df=json&cver=3.7.8&os=android' \
--header 'Content-Type: application/json' \
--data-raw '{
    "id":"123",
    "service":"account.login",
    "client":{
        "ve":"3.7.8",
        "os":"android",
        "fr":"API Level-27",
        "gameId":"100000",
        "channelId":"100000",
        "si":"123",
        "ex":{
            "brand":"vivo",
            "dpfr":"8.1.0",
            "imei":"123",
            "imsi":"123",
            "mac":"123",
            "mf":"vivo",
            "mobile":"",
            "model":"123",
            "net":"wifi",
            "orient":"P",
            "packageName":"123",
            "resX":"1080",
            "resY":"2034",
            "subChannelId":"",
            "utdid":"123",
            "versionCode":"1",
            "versionName":"3.7.8"
        },
        "empty":false
    },
    "data":{
        "ex":{
            "token":"123"
        }
    }
}'


image.png

image.png

可以说非常详细了,连每个字段的字节大小都返回了

 

-w

  • 等价参数: --write-out <format>
  • 作用:完成请求后指定输出格式
  • 单独的文章讲解,比较多变量

https://www.cnblogs.com/poloyy/p/14877100.html

 

-X(常用)

  • 等价参数: --request <command>
  • 作用:指定 HTTP 请求的 Method
curl -v -X POST http://baidu.com
curl -v --request POST http://baidu.com


image.png


工作中常用模板


不一定完全万能可用,根据自己需要进行修改

GET 请求

curl -L -S -s -K http://baidu.com

 

POST 请求

curl -L -S -s -K -X post \
-H "Content-type:application/json" \
-H ".." \
--data-raw "
{
     "a":123,
     "b:123        
}"
相关文章
|
20天前
|
Linux 网络安全 Python
linux后台运行命令screen的使用
linux后台运行命令screen的使用
52 2
linux后台运行命令screen的使用
|
20天前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
132 3
|
15天前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
175 73
|
8天前
|
Linux Shell
Linux 中 Tail 命令的 9 个实用示例
Linux 中 Tail 命令的 9 个实用示例
32 6
Linux 中 Tail 命令的 9 个实用示例
|
14天前
|
Linux 应用服务中间件 nginx
|
7天前
|
存储 Linux 编译器
linux中vim介绍以及常用命令大全
linux中vim介绍以及常用命令大全
28 8
|
4天前
|
设计模式 Java Linux
Linux的20个常用命令
Linux的23个常用命令
Linux的20个常用命令
|
9天前
|
机器学习/深度学习 安全 网络协议
Web安全-Linux网络命令
Web安全-Linux网络命令
11 1
|
14天前
|
Ubuntu Linux Shell
Linux系统命令 安装和文件相关命令
本文档详细介绍了Linux系统中的常用命令,包括软件安装卸载命令如`dpkg`和`apt-get`,压缩与解压命令如`gzip`、`bzip2`和`xz`,以及`tar`命令用于打包和解包。此外还介绍了文件分割命令`split`,文件操作命令如`cat`、`head`、`tail`、`more`、`less`等,管道命令和`wc`、`grep`、`find`、`cut`、`sort`、`uniq`、`diff`等实用工具。最后,文档还讲解了文件属性相关的命令如`chmod`、`chown`、`chgrp`以及创建硬链接和软链接的`ln`命令。
|
14天前
|
Linux Shell 网络安全
Linux 用户管理命令
本文详细介绍了Linux系统中的各类常用命令,包括用户管理(如`adduser`, `usermod`, `passwd`等)、系统操作(如关机、重启、注销)、磁盘管理(如`df`, `mkfs`, `mount`)及网络管理(如`ifconfig`, `ping`, `ssh`)等。通过具体示例展示了每个命令的基本用法和应用场景,帮助用户更好地理解和掌握Linux系统的管理和操作技巧。