--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
-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
本来 -d 会让 HTTP 请求变成 POST,但因为加了 -G,仍然是 GET,因为是查询字符串
-H(常用)
- 等价参数: --header <header/@file>
- 作用:添加 HTTP 请求头
curl -v -H "token:123" -H "Content-type:application/json" http://baidu.com
-H 指定两个请求头字段,都加上了
-i
- 等价参数: --include
- 作用:打印 Responses Headers 和响应内容
curl -i http://baidu.com
-I
- 等价参数: --head
- 作用:仅打印 Responses Headers
curl -I http://baidu.com
-k
- 等价参数: --insecure
- 作用:跳过 SSL 检测
curl -k -I https://www.baidu.com
目测不加也能正常发起 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
-O
- 等价参数: --remote-name
- 作用:将服务器 Responses 保存成文件,并将 URL 的最后部分当作文件名
-s
- 等价参数: --silent
- 作用:静默模式,将不输出错误和进度信息,不发生错误的话,会正常显示运行结果
-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" } } }'
可以说非常详细了,连每个字段的字节大小都返回了
-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
工作中常用模板
不一定完全万能可用,根据自己需要进行修改
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 }"