在上篇文章中,我们详细介绍了chocolatey安装gradle并解决了无法在idea中使用的问题。接下来我们继续使用chocolatey安装httpie和jqlang,并在powershell中使用。
httpie
httpie是一个http客户端,基于命令行。你可以理解为它是一个命令行的postman。
安装
仍是以管理员身份运行powershell,执行choco install httpie
命令。
这里输入a(全部选是)按回车,大小写都可。等待安装完成即可。
使用
现在,你可以通过普通权限的powershell来使用httpie了。例如我们这里使用它调一个接口:
http localhost:8080/user/getById/15887324334451507
// 我们可以省略localhost,上述请求可以写成http :8080/user/getById/15887324334451507
// 结果
HTTP/1.1 200
Connection: keep-alive
Content-Type: application/json
Date: Fri, 09 Aug 2024 18:26:12 GMT
Keep-Alive: timeout=60
Transfer-Encoding: chunked
{
"code": 200,
"data": {
"key": "15887324334451507",
"value": "张三"
},
"msg": "success",
"result": true
}
请求方式
GET
默认为GET请求
1. 无传参
http :8080/user/list
2. url传参
http :8080/user/list id==1 --> http ':8080/user/list?id=1'
http :8080/user/list ids==1,2,3,4 --> http ':8080/user/list?ids=1,2,3,4' ==> http ':8080/user/list?ids=1&ids=2&ids=3&ids=4'
POST
1. 无传参
http POST :8080/user/update
2. 有传参(body json),带Header
http :8080/team/bind teamId=1 userIds:='[1, 2, 3, 4]' Authorization:xxxxxxx
--> http :8080/team/bind <<<'{"teamId":1, "userIds":[1, 2, 3, 4]}' Authorizaiton:xxxxxxx
也可以将Authorization等的内容放到文件中,直接Authorization:@文件路径。例如:Authorization:@/Users/user.txt
省略。。。。去看文档吧
jqlang
是一个json的格式化工具,也是基于命令行。可以结合httpie一起使用。
安装
以管理员运行powershell,执行choco install jq
。
编码修复
jq只支持Unicode UTF-8。所以Windows的编码格式需要更改一下。
更改全局编码
- 打开
控制面板
->查看方式选择类别
->点击时钟和区域
->选择区域
,按图选中使用Unicode UTF-8全球语言支持
,一路确定,提示重启电脑
。
- 重启完成后,以管理员运行powershell。
- 打开 PowerShell 并输入以下命令来编辑配置文件:
notepad $PROFILE
- 如果配置文件不存在,会提示你创建一个新的文件。在文件中添加以下内容:
$OutputEncoding = [System.Text.UTF8Encoding]::new()
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
保存并关闭文件。这样,每次启动 PowerShell 时,输出编码都会自动设置为 UTF-8。
上面脚本的内容意思:
// 每次打开Powershell,使用UTF-8编码
$OutputEncoding = [System.Text.UTF8Encoding]::new()
// 使用Powershell读取和写入文件时,使用UTF-8编码
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
使用
格式化Json数据:
PS C:\Users\shang> echo '[{"id": "first", "val": 1}, {"id": "second", "val": 2}]' | jq
[
{
"id": "first",
"val": 1
},
{
"id": "second",
"val": 2
}
]
PS C:\Users\shang>
查询json中的数据
# powershell中双引号需要加反斜杠,mac中不需要
PS C:\Users\shang> echo '[{"id": "first", "val": 1}, {"id": "second", "val": 2}]' | jq '.[] | select(.id == \"second\")'
{
"id": "second",
"val": 2
}
PS C:\Users\shang>
和httpie结合使用
# 先看一下原始数据,-b的意思是只输出body的内容,不输出header信息,内容如下:
PS C:\Users\shang> http localhost:8080/user/getById/15887324334451507 -b
{
"code": 200,
"data": {
"key": "15887324334451507",
"value": "张三"
},
"msg": "success",
"result": true
}
# 现在我们只想要看到data中的数据,其他的也不关心
PS C:\Users\shang> http localhost:8080/user/getById/15887324334451507 -b |jq .data
{
"key": "15887324334451507",
"value": "张三"
}
# 甚至如果我们得到的data是个数组,我们可以单独提取出数组中元素的key
PS C:\Users\shang> http localhost:8080/user/list -b |jq .data[].key
"33941681737555284"
"33965884914177985"
"33507958405896566"
# 可以去掉它们的双引号
PS C:\Users\shang> http localhost:8080/user/list -b |jq .data[].key -r
33941681737555284
33965884914177985
33507958405896566
# 在所有用户中找到张三
PS C:\Users\shang> http localhost:8080/user/list -b |jq '.data[] |select(.key == \"15887324334451507\")'
{
"key": "15887324334451507",
"value": "张三"
}
或者
PS C:\Users\shang> http localhost:8080/user/list -b |jq '.data[] |select(.value == \"张三\")'
{
"key": "15887324334451507",
"value": "张三"
}
PS C:\Users\shang>
总结
作为强大的http 命令行客户端,httpie的功能绝不止于此,官方文档上也有更为详尽的说明;而jq作为一个强大的json数据处理工具,其功能本文也仅仅涉及到一小部分,例如它可以直接向json数据中添加数据等。
欢迎讨论!