HTTPie (读aych-tee-tee-pie)是一个 HTTP 的命令行客户端。其目标是让 CLI 和 web 服务之间的交互尽可能的人性化。
其有特点如下:
直观的语法
格式化和色彩化的终端输出
内置 JSON 支持
支持上传表单和文件
HTTPS、代理和认证
任意请求数据
自定义头部
持久性会话
类 Wget 下载
支持 Python 2.6, 2.7 和 3.x
支持 Linux, Mac OS X 和 Windows
插件
文档
测试覆盖率
使用Python语言编写
一 、环境搭建
- 首先安装python环境(下载,安装,设置环境变量)
- 然后安装easy_install(下载,安装)
- 执行 easy_install httpie
测试:
a>windows环境
使用cmd 进入命令行界面:
<code class="hljs css has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">C</span>:\<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Users</span>\<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">zhiwang</span>><span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">http</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">usage</span>: <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">http-script</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.py</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--json]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--form]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--pretty {all,colors,format,none}]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--style STYLE]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--print WHAT]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--verbose]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--headers]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--body]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--stream]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--output FILE]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--download]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--continue]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--session SESSION_NAME_OR_PATH | --session-read-only SESSION_NAME_OR_PATH]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--auth USER[:PASS]</span>] <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--auth-type {basic,digest}]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--proxy PROTOCOL:PROXY_URL]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--follow]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--verify VERIFY]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--cert CERT]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--cert-key CERT_KEY]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--timeout SECONDS]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--check-status]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--ignore-stdin]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--help]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--version]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--traceback]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[--debug]</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[METHOD]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">URL</span> <span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[REQUEST_ITEM [REQUEST_ITEM ...]</span>] <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">http-script</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.py</span>: <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">error</span>: <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">too</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">few</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">arguments</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>
如果能看到此,就说明ok了
二、基本操作
<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">模拟提交表单 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> -f POST yhz.me username=nate 显示详细的请求 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> -v yhz.me 只显示Header <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> -h yhz.me 只显示Body <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> -b yhz.me 下载文件 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> -d yhz.me 请求删除的方法 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> DELETE yhz.me 传递JSON数据请求(默认就是JSON数据请求) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> PUT yhz.me name=nate password=nate_password 如果JSON数据存在不是字符串则用:=分隔,例如 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> PUT yhz.me name=nate password=nate_password age:=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">28</span> <span class="hljs-operator" style="box-sizing: border-box;">a</span>:=<span class="hljs-constant" style="box-sizing: border-box;">true</span> streets:=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'["a", "b"]'</span> 模拟Form的Post请求, Content-Type: application/x-www-form-urlencoded; charset=utf-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--form POST yhz.me name='nate'</span> 模拟Form的上传, Content-Type: multipart/form-data <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> -f POST example.com/jobs name=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'John Smith'</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">file</span>@~/test.pdf 修改请求头, 使用:分隔 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> yhz.me User-Agent:Yhz/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.0</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Cookie:a=b;b=c'</span> Referer:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span>://yhz.me/ 认证 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> -<span class="hljs-operator" style="box-sizing: border-box;">a</span> username:password yhz.me <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--auth-type=digest -a username:password yhz.me</span> 使用<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span>代理 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--proxy=http:http://192.168.1.100:8060 yhz.me</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">http</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--proxy=http:http://user:pass@192.168.1.100:8060 yhz.me</span></code>