Python自动化 屹今为止最好用的 HTTP 客户端命令行工具-接口调试神器 HTTPie

kouyou · 2019年10月25日 · 最后由 zzh_1991 回复于 2020年04月13日 · 784 次阅读

一、思考❓❔

1.你用过哪些http客户端调试工具?

  • Postman

    • 不够灵活
    • 需要打开客户端, 麻烦
    • 学习成本高
  • Jmeter

    • 臃肿
    • 麻烦
    • 学习成本高
  • curl

    • 参数多, 记不住
    • 不够灵活
    • 主要在Linux中使用
    • 学习成本高
  • wget

    • 主要用于命令行下载, 功能单一
    • 参数多, 记不住
    • 主要在Linux中使用


2.有没有哪种工具可以解决上述所有不足呢?

史上最好用的HTTP客户端命令行工具——HTTPie

  • 基于命令行
    • 超简洁、直观
  • 支持JSON
  • 支持语法高亮、格式化输出
  • 支持wget下载
  • 支持session会话
  • 支持HTTPS
  • 支持代理、认证
  • 支持表单提交和文件上传
  • 支持任意获取请求头、请求体、响应头或者响应体
  • 支持Linux, macOS, and Windows平台
  • 等等



二、安装🔨🔨

1.Linux

  • Ubuntu或者Debian
sudo apt-get install httpie
  • CentOS或者RHEL
sudo yum install httpie


2.Windows

  • 需要先安装python3
  • 再安装httpie
# 更新pip到最新版本
pip install --upgrade pip setuptools

# 使用国内源安装httpie
pip install -i https://pypi.douban.com/simple --upgrade httpie



8.macOS

brew install httpie



三、常用操作💪🏽💪🏽

1.语法格式

http [flags] [METHOD] URL [ITEM [ITEM]]


2.默认操作

# http url, 不带任何参数默认为GET请求
http http://localhost:8000/

# http url 参数名=参数值, 默认为POST请求
# 且以json格式来传递(Content-Type为application/json)
# 默认也接收json格式的数据(Accept为application/json, */*)
http http://localhost:8000/user/login/ username=lemon1 password=123456


3.不同的参数类型

  • json
    • 默认
  • form
  • query string
  • header
Item Type 描述
Name:Value 请求头, 例如: X-API-Token:123
name==value url查询字符串参数
field=value, field=@file.txt JSON(默认)或者-j
--form或者-f为form表单传参
field:=json, field:=@file.json 传递json的 Boolean, Number, 嵌套对象, Array类型
例如: meals:='["ham","spam"]' 或者 pies:=[1,2,3]
field@/dir/file 以form表单来上传文件
--form, -f. screenshot@~/Pictures/img.png
# 以json格式的字符串来传参(默认)
http POST http://localhost:8000/user/login/ username=lemon1 password=123456

# 以form表单来传参
http -f POST http://localhost:8000/user/login/ username=lemon1 password=123456
# 或者
http --form POST http://localhost:8000/user/login/ username=lemon1 password=123456
# 请求头中的Content-Type为application/x-www-form-urlencoded; charset=utf-8

# 以查询字符串参数形式来传参
http -v http://localhost:8000/user/login/ username==lemon1 password==123456
# 请求头中的请求首行为GET /user/login/?username=lemon1&password=123456 HTTP/1.1

# 传递请求头参数
http http://localhost:8000/user/login/ username=lemon1 password=123456 User-Agent:"Mozilla/5.0 KeYou"
# 查看请求头中的User-Agent参数为 User-Agent: Mozilla/5.0 KeYou


4.获取请求和响应信息

  • 获取响应头
    • -h
  • 获取响应体
    • -b
  • 获取请求头
    • -p H 或者 --print=H
  • 获取请求体
    • -p B 或者 --print=B
# 获取响应头
http -h http://localhost:8000/user/login/ username=lemon1 password=123456

# 获取响应体
http -b http://localhost:8000/user/login/ username=lemon1 password=123456

# 获取响应头和响应体(默认)
http http://localhost:8000/user/login/ username=lemon1 password=123456
# 或者
http -p hb http://localhost:8000/user/login/ username=lemon1 password=123456

# 获取请求头
http -p H http://localhost:8000/user/login/ username=lemon1 password=123456

# 获取请求体
http -p B http://localhost:8000/user/login/ username=lemon1 password=123456

# 获取请求头和请求体
http -p BH http://localhost:8000/user/login/ username=lemon1 password=123456


5.认证

  • 登录用户名和密码
    • -a 或者 --auth
    • Basic auth类型的认证才行
  • 同一session会话请求
# a.将会话文件保存在指定路径
# 注: Windows中的路径是以\进行分割的, linux中为/
http --session=~\s1.json -a lemon1:123456 -p Hh http://localhost:8000/api/login/
# 登录的session会话, 会保存在家目录下的s1.json文件中

# b.命名会话
http --session=s2 -a lemon1:123456 -p Hh http://localhost:8000/api/login/
# 会话命名为s2
# Windows系统中会话保存在%APPDATA%\httpie\sessions\<host>\<name>.json文件

# c. 后续直接使用同一会话去请求
http --session=~\s1.json http://localhost:8000/projects/ page==2 size==2
http --session=s2 http://localhost:8000/projects/ page==2 size==2
  • JWT token认证
# 方法一:
# a. 先登录获取token
http http://localhost:8000/user/login/ username=lemon1 password=123456
# 响应体中有token值
http http://localhost:8000/projects/ page==2 size==2 Authorization:"JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxNiwidXNlcm5hbWUiOiJsZW1vbjEiLCJleHAiOjE1NzA3NTIyMzksImVtYWlsIjoia2V5b3UwQHFxLmNvbSJ9.p7az1upstXTf-IHHigiISymkz6-Q_O4DC3ouLXnLqLY"

# b. 可以将JWT设置为环境变量
# 可以使用Windows平台下的git bash来设置环境变量
export TOKEN1='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxNiwidXNlcm5hbWUiOiJsZW1vbjEiLCJleHAiOjE1NzA3NTIyMzksImVtYWlsIjoia2V5b3UwQHFxLmNvbSJ9.p7az1upstXTf-IHHigiISymkz6-Q_O4DC3ouLXnLqLY'
# c. 后续直接使用同一token去请求
http -p Hh http://localhost:8000/projects/ page==2 size==2 Authorization:"JWT ${TOKEN1}"


# 方法二:
# 可以通过安装httpie-jwt-auth插件来简单高效, 处理JWT认证
# a. 安装
pip install -i https://pypi.douban.com/simple httpie-jwt-auth

# b. 使用
http --auth-type=jwt --auth="你的token" 你的url地址

# 默认使用Bearer前缀, 也可以指定其他前缀
JWT_AUTH_PREFIX=JWT http --auth-type=jwt --auth="你的token" 你的url地址

# c. 最简单的方法为
# 设置环境变量, 简化token的传递
export JWT_AUTH_TOKEN='你的token'
export JWT_AUTH_PREFIX='JWT'

http --auth-type=jwt :8000/projects/ page==2 size==2
# --auth-type可以缩写为-A
http -A jwt :8000/projects/ page==2 size==2


6.下载

# 下载资源, 使用--download
# 类似于wget
http --download http://localhost:8000/projects/ page==2 size==2 Authorization:"JWT ${JWT1}"


7.请求地址为localhost的简化

  • 如果请求地址为localhost或者127.0.0.1本地地址, 可以省略ip
  • 如果端口号为80, 那么端口号也可省略
# 省略ip, 默认的ip为localhost
http :8000
http :8000/projects/

# 省略ip和端口
# 默认访问的地址为 http://localhost/
http :
# 默认访问的地址为 http://localhost/projects/
http :/projects/



三、总结💡💡

  • 本文重点介绍了HTTPie客户端命令行工具的安装和常用操作
  • 内容较为完整, 且有案例演示
  • 对于做前后端联调、接口测试人员有较强的实际意义
  • 本文为可优原创, 如需转载请联系本人。有不足之处, 欢迎指点!

共收到 4 条回复

这是自动化执行发布的评论!2020_04_12_15_35_25

这是自动化执行发布的评论!2020_04_12_15_37_55

这是自动化执行发布的评论!2020_04_12_15_39_48

可优大佬讲的东西很有价值!点个赞!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册