http://lingxiankong.github.io/blog/2014/08/19/curl-httpie/

前两天在网上看到一个号称比cURL更牛逼的命令行工具HTTPie,提供命令行交互方式来访问HTTP服务。其实我本人平常用cURL就比较少(因为喜欢GUI界面),但还是经受不住好奇心的驱使,晚上回家连上VPN,在服务器上简单试了一下–HTTPie果然强大。

cURL

先说cURL的基本使用方法,curl -X METHOD -H HEADER -i,后面的-i是表示显示返回消息的头部,如果你使用cURL访问OpenStack,那么这个选项在获取UUID类型的token时必不可少。

为了使用cURL访问OpenStack,我们先创建一个文件/opt/temp/auth.json,内容为:

  1. {
  2. "auth": {
  3. "identity": {
  4. "methods": ["password"],
  5. "password": {
  6. "user": {
  7. "id": "54cce50afba748889017143c7dda0bc9",
  8. "password": "passwd"
  9. }
  10. }
  11. },
  12. "scope": {
  13. "project": {
  14. "domain": {
  15. "name": "Default"
  16. },
  17. "name": "admin"
  18. }
  19. }
  20. }
  21. }

熟悉OpenStack的童鞋可以看出来,这就是发送到Keystone V3获取租户token的请求消息体,我这里使用admin租户,用户id和password请根据你的实际环境修改。

有了请求消息体,我们使用cURL发送消息:

  1. curl -i -X POST -H "Content-Type: application/json" -d @/opt/temp/auth.json http://10.250.10.233:35357/v3/auth/tokens

这里-d后面表示请求消息体,如果消息体在文件中,那么使用@符号作为前缀对文件进行读取。返回如下: 再来查询一下环境中的虚拟机:

  1. curl -i -X GET -H "Content-Type: application/json" -H "X-Auth-Token:0a9d6927b0b447e0a8f1dbdd98ebfd81" http://10.250.10.233:8774/v2/1239a5497568464b89688806afe11f7c/servers

虽然消息正常返回,但看起来很乱,返回的json消息体也不方便阅读,如果想从返回消息体中获取一些信息是比较困难的。

下面该HTTPie上场了!

HTTPie

先安装。pip install httpie

HTTPie基于python编写,内部使用了Requests和Pygments库。

HTTPie的用法要比cURL直观很多,没有那么多选项,基本上心里怎么想就怎么写,默认输入和输出都是json格式 (而cURL必须要指定-H "Content-Type: application/json"),具体可查阅HTTPie的文档。

同样是实现上面的获取token和查询虚拟机的功能,使用HTTPie的体验如下。 我们仍然使用/opt/temp/auth.json文件作为请求消息体,命令如下:

  1. http POST http://10.250.10.233:35357/v3/auth/tokens @/opt/temp/auth.json
  2. http GET http://10.250.10.233:8774/v2/1239a5497568464b89688806afe11f7c/servers X-Auth-Token:df76d62a729f4544a9225f4a8d2bfa1a

直接上图:

看到了吧!HTTPie返回的消息体自动做了高亮和格式化!

但是如果PUT操作呢?消息体该如何写?其实也很简单,举个例子:

  1. http PUT api.example.com/person/1 name=John age:=29 married:=false hobbies:='["http", "pies"]'

name:=value这种格式表示非string的值。

小结

这篇文章的目的是为了抛砖引玉,在实际使用中cURL和HTTPie都有很多高级用法,我这里仅仅是最简单的使用场景(但其实对于访问OpenStack来说,似乎足够了)。从实验结果上看,虽然HTTPie确实比cURL强大很多,但对于我个人而言,始终不喜欢命令行操作,可能有些人觉得我不够“极客”,但我确实觉得有些事情使用命令行效率太低。相比于cURL和HTTPie,chrome下的Postman才是我的最爱

cURL和HTTPie的更多相关文章

  1. POSTMAN and HTTPie to test APIs

    http://blog.mashape.com/postman-httpie-test-apis/ We love working with APIs at Mashape, and we love ...

  2. 人性化的HTTP命令行工具——HTTPie

    Httpie 是什么 Httpie (aych-tee-tee-pie)是一个 HTTP 的命令行客户端.其目标是让 CLI 和 web 服务之间的交互尽可能的人性化.你可以用它很方便的用 http ...

  3. 7.httpie

    可以使用curl或httpie测试我们的服务器.Httpie是用Python编写的用户友好的http客户端   安装:pip3 install httpie #get请求示例 输入命令:http ht ...

  4. Shell命令行

    利用wc命令统计文件行,单词数,字符数,利用sort排序和去重,再结合uniq可以进行词频统计. cat file.txt sort hello.c | uniq -c | sort -nr |hea ...

  5. Django REST framework 中文教程1:序列化

    建立环境 在我们做任何事情之前,我们将使用virtualenv创建一个新的虚拟环境.这将确保我们的包配置与我们正在开展的任何其他项目保持良好的隔离. virtualenv envsource env/ ...

  6. drf 教程

    1, 序列化 Serialization 创建一个新环境 在做其他事之前,我们会用virtualenv创建一个新的虚拟环境.这将确保我们的包配置与我们正在工作的其他项目完全隔离. virtualenv ...

  7. Spring 官方教程:使用 Restdocs 创建 API 文档

    https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=2247483998&idx=1&sn=6ae5fa795d36b1 ...

  8. youtube-dl 安装和用法

    以windows为例 下载python2最新版本并安装,选择添加到PATH 下载ffmpeg最新版本并解压,在控制面板->高级系统设置->环境变量->PATH里添加解压之后的bin文 ...

  9. API(一)之Serialization

    virtualenv is a tool to create isolated Python environments. 建立一个新的环境 Before we do anything else we' ...

随机推荐

  1. This application is currently offline. To enable the application, remove the app_offline.htm file from the application r

    退出VS ,把程序中主目录里的app_offline.htm文件删除,重新启动VS 就可以了.

  2. Mac 下安装mitmproxy

    环境:  Mac OS X 10.9.4 1. 安装 直接用pip 安装 pip install mitmproxy 发现在安装依赖包 lxml 的时候报错 In : /private/tmp/pip ...

  3. 仿iReader切换皮肤进度条

    仿iReader切换皮肤进度条 标签(空格分隔): 自定义View [TOC] 本以为使用paint.setXfermode(new PorterDuffXfermode(Mode.XOR));可以轻 ...

  4. MPEG2/TS 包结构简述

    TS 包由以下3部分组成: 包头: 4字节, 同步,识别,检错和加密用 自适配域:可选 包数据:最大184字节(不存在自适配域) 4字节 184字节 包头 自适配域 包数据 4字节包头结构: 1字节 ...

  5. Android客户端与PHP服务端交互(一)---框架概述

    背景 作为一个普通上班族,总是想做一些自认为有意义的事情,于是乎准备成立一个工作室,尽管目前正在筹备阶段,但是之前有些朋友提出一些需求的时候,我发现自己的能力还是有限,直到最近和一些技术牛朋友聊起这事 ...

  6. 聊聊并发(七)——Java中的阻塞队列

    3. 阻塞队列的实现原理 聊聊并发(七)--Java中的阻塞队列 作者 方腾飞 发布于 2013年12月18日 | ArchSummit全球架构师峰会(北京站)2016年12月02-03日举办,了解更 ...

  7. [转]zetex.lib

    *BAL74 ZETEX Spice Model Last revision 24/8/92*NOTES: FOR RF OPERATION ADD PACKAGE INDUCTANCE 0F 2.5 ...

  8. [Z]CS权威会议

    CS Conference TOP 40 计算机会议TOP40 一.A 类 15 个 ASPLOS: Architecture Support for Programming Languages an ...

  9. 30分钟入门Java8之默认方法和静态接口方法

    30分钟入门Java8之默认方法和静态接口方法 前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方 ...

  10. 无插件纯web 3D机房 (第四季:大型园区、地球仪效果和其他扩展应用)

    前言 初次见面的朋友们大家好,这篇文章是"无插件纯web 3D机房"系列的第四季,感兴趣的朋友可从头开始观看,以下是正确的阅读顺序: 无插件纯web 3D机房(第一季:从零开始搭建 ...