curl 介绍curl 是常用的命令行工具,用来请求 Web 服务器它的名字就是客户端(clIEnt)的 URL 工具的意思它的功能非常强大,命令行参数多达几十种如果熟练的话,完全可以取代 Postman 接口测试工具
官方文档
https://curl.se/docs/manpage.html
支持的协议DICT、file、FTP、FTPS、GOPHER、http、httpSIMAP、IMAPS、LDAP、LDAP、POP3、POP3、RTMP、RTSP、SCP、SFTP、SMBSMBS、SMTP、SMTPS、TELNET、TFTP
提供强大的功能代理支持用户身份验证FTP上传httppostSSL连接cookies文件传输恢复Metalink等等
语法格式
curl [options / URLs]
URL 的各种传法
仅做拓展,实际工作感觉不一定会用的上
大括号 { }http://site.{1,2,3}.com
等价于发了请求了三个 host
http://site.1.comhttp://site.2.comhttp://site.3.com
中括号 [ ] 获得字母数字序列
类似 range(1,100)
ftp://ftp.example.com/file[1-100].txt文件 # 100个请求ftp://ftp.example.com/file[001-100].txt(带0) # 100个请求ftp://ftp.example.com/file[a-z].txt文件 # 26个请求
注意:不支持嵌套序列,但可以在每个序列旁边使用多个嵌套序列
综合使用
http://example.com/archive[1996-1999]/vol[1-4]/第{a,b,c}部分.HTML
[ ] 结合 步进
http://example.com/file[1-100:10].txt文件 # 每10个取一次,总共10个请求 http://example.com/file[a-z:2].txt文件 # 每2个取一次,总共13个请求
常见参数不带参数请求网页地址
https://www.cnblogs.com/poloyy/
返回的是网页的 HTML 源码
如果是一个正常的 get 请求
注意
后面的栗子,基本都会加 -v,是为了看请求的详细过程,更容易看到对应的参数已生效,实际使用不需要每次都 -v
-A等价参数: --user-agent <name> 作用:指定客户端的 User-Agent
curl -v -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/91.0.4472.77 Safari/537.36" http://baIDu.com
-b等价参数: --cookie <data|file>作用:向服务器发送 cookie,可以是 data 也可以是一个文件
curl -v -b 'foo=bar' http://baIDu.com
Request headers 将会生成一个cookie: foo=bar
,向服务器发送一个名为 foo
、值为 bar
的 cookie
通过打印详细信息,可以看到请求头的确加了
-c等价参数: --cookie-jar <filename>作用:将服务器返回需要设置的 cookie 写入一个文件
curl -k -v -c test.txt https://www.baIDu.com/s?wd=123%E8%89%BE%E5%BE%B7&rsv_spt=1&rsv_iqID=0xf0b9806f0000107b&issp=1&f=8&rsv_bp=1&rsv_IDx=2&IE=utf-8&tn=baIDuhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=1138&rsv_sug4=1138
会将百度响应需要设置的 cookie 写入 test.txt 文件
-d(常用)等价参数: --data <data>作用:用于发送 POST 请求的数据体
curl -v -d 'wd=biying' -d 'IE=UTF-8' https://www.baIDu.com/s
http 请求头会自动加上 Content-Type : application/x-www-form-urlencoded并且会自动将请求转为 POST 方法,因此可以省略-X POST
--data-urlencode(常用)
作用:参数等同于 -d
,发送 POST 请求的数据体,但它会自动将发送的数据进行 URL 编码
curl -v -G --data-urlencode 'wd=b i y i n g' -d 'IE=UTF-8' https://www.baIDu.com/s
会将空格进行 URL 编码
curl -v -G -d 'wd=b i y i n g' -d 'IE=UTF-8' https://www.baIDu.com/s
-d 就不会 url 编码
--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","fr":"API Level-27","gameID":"100000","channelID":"100000","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" },"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.comcurl -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 }"
总结
以上是内存溢出为你收集整理的Linux - curl 命令全部内容,希望文章能够帮你解决Linux - curl 命令所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)