第十四章 应用编程接口(五)

一. 使用HTTPie测试WEB服务

在上一小节,我们使用了Postman测试WEB api,如果钟爱于使用命令行测试,那么也可以使用HTTPie。

1.假设服务运行在127.0.0.1:5000上,在另一个窗口可以使用如下方式发起get请求:

http --json --auth 用户名:密码 GET http://127.0.0.1:5000/api/v1/posts/

将分页返回博客文章:

2.下面这个命令使用POST请求添加一篇新文章:

http --auth 用户名:密码 --json POST http://127.0.0.1:5000/api/v1/posts/ "body=post from command line."

 响应:

3.如果不想使用用户名和密码验证身份,可以先向/api/v1/tokens/发送post请求获取令牌:

http --auth 用户名:密码 --json POST http://127.0.0.1:5000/api/v1/token

响应:

 

之后就可以使用如下形式发送新请求:

扫描二维码关注公众号,回复: 10514331 查看本文章

二. 补充:HTTPie介绍

       HTTPie和同类的curl相比,它的命令更简洁直观,易于记忆和使用。它内置了JSON支持,而且对输出的内容进行了排版和高亮显示。HTTPie使用pipenv或pip安装:

pipenv install httpie --dev

在HTTPie中,请求从HTTP开始,一个完整的请求语句大概会是这样:

http --json GET api.example.com name==greyli data=test Header-Foo:bar

从上面的语句可以发现,HTTPie对不同的内容使用不同的符号,先总结如下表:

类别 符号 示例
URL参数 == param==value
首部字段(Head) : Name:Value
数据字段 = field=value
原生JSON字段 := field:=value
表单上传字段 @ field@/dir/file

此外,为了简化输入,HTTP还提供了一系列缺省选项,这些选项的默认值如下:

简写形式 缺省值 默认值
example.com HTTP协议 http
:5000 本地主机地址 localhost
: 本地主机地址,端口 localhost:80
留空 请求方法 GET

利用HTTPie默认值,获取某篇文章的所有评论,命令可以简写为:

>http --json :5000/api/v1/posts/1/comments/ Authorization:"Basic ZXlKaGJHY2lPaUpJVXpVeE1pSXNJbWxoZENJNk1UVTRNems1TVRjMU1Td2laWGh3SWpveE5UZ3pPVGsxTXpVeGZRLmV5SnBaQ0k2T0gwLmtfNk9uVmp5NFcxYmlHaGnckdjljmflmphaURNRUdScnJaUHExMjdDMnd4REtsNS1ER19yMWY0OS02WDhLZHNKVHUyU1NvLWxFcjlBTWNnd0x6NVJ3Og=="

注意:此处并没有使用--auth选项,而是使用更通用的一种写法,使用key:value的形式直接将认证凭据手动放到了请求头。Basic Auth中,将认证信息以"name:password"的形式进行Base64编码,放在Head的Authorization字段中。Base64不涉及加密,因此是明文的形式,只能借助https加密保证安全。我这了的Authorization值是使用postman生成的复制下来的,如下:

响应结果:

默认获取第一页,使用查询参数page==2可以获取第二页:

http --json :5000/api/v1/posts/1/comments/ page==2 Authorization:"Basic ZXlKaGJHY2lPaUpJVXpVeE1pSXNJbWxoZENJNk1UVTRNems1TVRjMU1Td2laWGh3SWpveE5UZ3pPVGsxTXpVeGZRLmV5SnBaQ0k2T0gwLmtfNk9uVmp5NFcxYmlHaGoxVVVNN21QSmphaURNRUdScnJaUHExMjdDMnd4REtsNS1ER19yMWY0OS02WDhLZHNKVHUyU1NvLWxFcjlBTWNnd0x6NVJ3Og=="

运行结果:

后端分页时,我们使用paginate方法,并将error_out参数设为False,当page超出pagination.pages时,并不会报错:

http --json :5000/api/v1/posts/1/comments/ page==3 Authorization:"Basic ZXlKaGJHY2lPaUpJVXpVeE1pSXNJbWxoZENJNk1UVTRNems1TVRjMU1Td2laWGh3SWpveE5UZ3pPVGsxTXpVeGZRLmV5SnBaQ0k2T0gwLmtfNk9uVmp5NFcxYmlHaGoxVVVNN21QSmphaURNRUdScnJaUHExMjdDMnd4REtsNS1ER19yMWY0OS02WDhLZHNKVHUyU1NvLWxFcjlBTWNnd0x6NVJ3Og=="

响应结果:

       当需要发送POST请求提交表单时,因为表单数据需要以www-x-formencode的形式写入请求主体,需要使用--form选项。表单数据以key=value的形式传入,表单字段以空格分隔。

       为了避免每次请求都输入Authorization字段,可以使用--session=Authorization字段临时存储在本地,比如:

http --json --session=Authorization :5000/api/v1/users/1 Authorization:"Basic ZXlKaGJHY2lPaUpJVXpVeE1pSXNJbWxoZENJNk1UVTRNems1Tmpjd05Td2laWGh3SWpveE5UZzBNREF3TXpBMWZRLmV5SnBaQ0k2T0gwLjlEMUxBVGc1c3hZUHJ2VlZnYmZ2OWJxdEdxMnJPLUFkd2VmZklmVUpVMHVxR29TT2w5MXpZQmpUMThocHZBMGpXTlJmOGU3RmFIcU9rVF9PZW9WSzB3Og=="

响应结果:

发布了132 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Geroge_lmx/article/details/104815303