相较于curl那把瑞士军刀的小巧和强大,httpie则只是在http client端进行了改进,如果你需要的功能是一个客户端,能够与提供rest api接口的后端进行交互实现常见的GET/PUT/DELET/POST等操作,通过json/xml文件与之进行交互,设定HTTP Header,可能同时会使用HTTPS方式等这样常见的需求,使用curl命令足够了,唯一缺点是使用起来稍显繁琐,希望这种场景下的简化需求则可以考虑httpie是否是你所需要的,这篇文章将会进行简单地使用介绍。

概要信息

Httpie概要信息如下表所示:

项目 说明
官网 https://httpie.org
开源/闭源 开源
源码管理地址 https://github.com/jakubroztocil/httpie
License类别 BSD-3-Clause License
开发语言 python
当前稳定版本 1.0.2 (2018/11/14)
操作系统支持 跨平台,支持Linux/Windows/Mac
下载地址:github release https://github.com/jakubroztocil/httpie/releases

功能特性

Httpie包含多种功能特性,诸如:

  • 更直观和易于表达的语法
  • 格式化与可色彩定制的终端输出
  • 内置的JSON支持
  • 支持表单和文件上传
  • 支持HTTP/HTTPS
  • 支持HTTP_PROXY和HTTPS_PROXY
  • 支持任意格式的请求数据
  • 可定制的Http Header
  • 支持持久化的Session
  • 支持Python2.7和Python3.x
  • 多操作系统:Linux/MacOS/Windows等的支持
  • 完善的文档
  • 支持下载模式,类似wget的功能

安装

httpie提供多种安装方式,包括使用操作系统提供的包管理工具或者pip进行安装。

使用操作系统的包管理工具

  • MacOS

安装命令:brew install httpie

  • CentOS等

安装命令:yum install httpie

  • Ubuntu等

安装命令:apt-get install httpie

使用pip进行安装

安装命令:pip install --upgrade httpie

安装示例

以下是在MacOS上使用pip进行安装的日志示例

liumiaocn:~ liumiao$ pip install --upgrade httpie
Collecting httpie
...省略
Installing collected packages: httpie
Successfully installed httpie-1.0.2
liumiaocn:~ liumiao$

安装后使用version选项进行版本确认,是目前的最新稳定版本1.0.2

liumiaocn:~ liumiao$ http --version
1.0.2
liumiaocn:~ liumiao$

curl vs httpie

curl命令示例:
curl -i -X PUT httpbin.org/put -H Content-Type:application/json -d ‘{“hello”: “world”}’

http命令示例:
http -v PUT httpbin.org/put API-Key:foo hello=world

使用方式

命令格式

使用格式:http [设定选项] [HTTP动作] URL地址 [设定项]

URL快捷写法

httpie就是更为简便写法的curl的http client,体现在URL的写法上,相信看了下面两个示例即可了解一二。

  • 规则1: http://localhost可以省略

http http://localhost:32044/login = http :32044/login

  • 规则2: 端口80可以省略

http http://localhost:80/login = http :/login

HTTPS支持

可以通过设定default-scheme来设定https

设定方式:http --default-scheme=https 其他内容

  • 常用技巧

设定alias可以更加便利的操作,这样就像HTTPIE的HTTPS版命令一样,可以直接使用https即可操作,不必每次执行都要加上default-scheme=https的设定
alias https=‘http --default-scheme=https’

HTTP请求设定

常见的HTTP请求经常需要用到如下几种设定需要:

类型 设定方式 备注
设定Http header,比如Content-Type 设定项目名称:设定项目值 -
设定URL的传入参数 设定项目名称==设定项目值 使用==来表示这种情况
设定JSON对象或文件 field=设定值 或 field=@设定值 设定值为JSON对象或者可以转化的JSON文件名(与-f或者--form结合使用)
设定JSON数据 field:=设定值 或 field:=@设定值 直接传入JSON设定内容
设定form表单 field@设定值 仅与-f或者--form结合使用

缺省设定

JSON是Web服务的无冕的通用数据类型,在Httpie中也是对Http Header其进行了如下缺省设定,当然这些都可以进行覆盖。

设定内容 设定值
Content-Type application/json
Accept application/json, */*
  • 非字符方式的JSON项
    非字符方式的JSON向使用:=分隔符而不是=分割符。

表单方式

表单方式的提交与JSON类似,通过--form或者-f来进行,httpie会将其转化会Content-Type: application/x-www-form-urlencoded; charset=utf-8的设定之后进行处理,简化了用户的设定

常见使用示例

取消header的缺省设定

命令:http URL/headers header设定项:

  • 使用示例:
liumiaocn:~ liumiao$ http httpbin.org/headers Accept: User-Agent:
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 99
Content-Type: application/json
Date: Sun, 14 Apr 2019 12:46:16 GMT
Server: nginx{"headers": {"Accept-Encoding": "gzip, deflate", "Host": "httpbin.org"}
}liumiaocn:~ liumiao$liumiaocn:~ liumiao$
liumiaocn:~ liumiao$ http httpbin.org/headers
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 130
Content-Type: application/json
Date: Sun, 14 Apr 2019 12:46:39 GMT
Server: nginx{"headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "HTTPie/1.0.2"}
}liumiaocn:~ liumiao$

将Header设定为空

命令:http URL/headers ‘Header;’

  • 使用示例:
liumiaocn:~ liumiao$ http httpbin.org/headers 'Header;'
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 136
Content-Type: application/json
Date: Sun, 14 Apr 2019 12:47:06 GMT
Server: nginx{"headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Header": "", "Host": "httpbin.org", "User-Agent": "HTTPie/1.0.2"}
}liumiaocn:~ liumiao$

设定Cookies

Http客户端将cookies像Http Header一样发送至服务端,这意味这Httpie对于cookie的操作像普通的Header一样, 多项cookie设定中间用分号隔开

命令:http URL ‘Cookie:设定项1=设定值1;设定项2=设定值2’

设定Basic认证方式

可以通过用户名/密码的Basic认证方式的,可以使用-a通过用户名和密码进行登录,使用方式如下:

命令:http -a 用户名:密码 URL

如果不设定密码时,则会提示密码的输入

命令:http -a 用户名 URL

另外可以活用.netrc文件来保存认证信息

文件位置:~/.netrc

  • 内容示例
machine URL
login 用户名
password 密码

设定proxy

可使用如下设定示例进行http或者https的proxy的设定

命令示例:
http --proxy=http:http://10.10.1.10:3128 --proxy=https:https://10.10.1.10:1080 example.org

需要使用用户名和密码的proxy场景可尝试如下方式:

命令示例:http --proxy=http:http://user:pass@10.10.1.10:3128 example.org

环境变量方式:同样也可以使用环境变量方式进行设定,这并非httpie的功能

命令示例:
export HTTP_PROXY=http://10.10.1.10:3128
export HTTPS_PROXY=https://10.10.1.10:1080
export NO_PROXY=localhost,example.com

  • socks proxy
    首先需要如下前提,需要requests[socks]的安装

依赖事项:pip install -U requests[socks]

命令示例:
http --proxy=http:socks5://user:pass@host:port --proxy=https:socks5://user:pass@host:port example.org

HTTPS访问

  • httpsURL中跳过ssl验证

命令示例:http --verify=no https://example.org

  • 使用CA bundle

命令示例:http --verify=/ssl/custom_ca_bundle https://example.org

  • 客户端使用证书访问

命令示例:http --cert=client.pem https://example.org

  • 客户端结合使用私钥信息(证书中不包含私钥的情况)访问

命令示例:http --cert=client.crt --cert-key=client.key https://example.org

  • 指定SSL版本进行访问
    缺省为SSL v2.3,可根据需要设定为ssl2.3/ssl3/tls1/tls1.1/tls1.2/tls1.3等

命令示例:http --ssl=ssl3 https://vulnerable.example.org

设定输出选项

  • 仅希望输出Http header

命令格式:http --headers URL
http -h URL

  • 仅希望输出Http body

命令格式:http --body URL
http -b URL

  • 输出Http header和body

命令格式:http --verbose URL
http -v URL

重定向设定

缺省的输入是通过stdin标准输入来进行,可通过<进行重定向,也可以使用|管道进行传递

  • 使用<重定向

使用示例:http PUT example.com/person/1 X-API-Token:123 < person.json

  • 使用|传输

使用示例:echo ‘{“name”: “John”}’ | http PATCH example.com/person/1 X-API-Token:123

终端输出设定

通过如下设定选项可以设定终端输出格式:

设定项目 设定说明
--pretty=colors 设定颜色
--pretty=format 设定格式
--pretty=all 设定颜色和格式,缺省行为
--pretty=none 颜色与格式不设定,重定向时的缺省行为

下载模式

使用-d或者--download可以像wget一样进行下载

命令:http -d URL

  • 使用示例:
liumiaocn:~ liumiao$ http -d www.baidu.com
HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0xbadab11d00183a3d
Cache-Control: private
Connection: Keep-Alive
Content-Type: text/html
Cxy_all: baidu+c18d2d97de93704b5bdacad076dfc57a
Date: Sun, 14 Apr 2019 12:47:48 GMT
Expires: Sun, 14 Apr 2019 12:46:57 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Server: BWS/1.1
Set-Cookie: BAIDUID=6BC656666AB4C0A81F799554CFCE9871:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=6BC656666AB4C0A81F799554CFCE9871; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1555246068; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1424_21088_28773_28723_28558_28836_28584_28603_28605; path=/; domain=.baidu.com
Transfer-Encoding: chunked
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1Downloading to "index.html"
Done. 149.83 kB in 0.21465s (698.04 kB/s)
liumiaocn:~ liumiao$

Session操作

  • 创建一个新的session

命令示例:http --session=/tmp/session.json example.org API-Token:123

  • 使用既存的session

命令示例:http --session=/tmp/session.json example.org

  • 创建一个命名会话(Name Session)

命令示例:http --session=user1 -a user1:password example.org X-Foo:Bar

*使用既存的session(Name Session)

命令示例:http --session=user1 example.org

参考内容

https://httpie.org/
https://httpie.org/doc
https://github.com/jakubroztocil/httpie

Httpie快速使用入门指南相关推荐

  1. ParaView Visualizer 在ubuntu22.04环境下快速开发入门指南

    ParaView Visualizer 在ubuntu22.04系统下的快速开发指南 1 前提条件 2 ParaView下载与配置 2.1 Linux环境ParaView下载与配置 2.2 Windo ...

  2. 腾讯云GPU渲染型应用场景,腾讯云GPU实例类型,快速操作入门指南

    腾讯云GPU云服务器产品概述和产品优势,GPU计算型应用场景 腾讯云GPU云服务器 渲染型应用场景 腾讯云推出 GPU 渲染型 GA2 实例,搭配 AMD 最新 S7150 系列 GPU,单 GPU ...

  3. STM32F767ZI NUCLEO144 基于CubeIDE快速开发入门指南

    刚入手的NUCLEO-F767ZI:整合官网资源,理清思路,便于快速进行快发: 文章目录 1 NUCLEO 系列 2 NUCLEO-F767ZI 3 环境搭建 3.1 Keil/IAR安装 3.2 C ...

  4. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自 | GitHub    作者 | Jay Alammar 转自 | 机器之心 如 ...

  5. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南

    2019-12-31 10:50:59 选自GitHub 作者:Jay Alammar 参与:王子嘉.Geek AI 如果你是一名自然语言处理从业者,那你一定听说过最近大火的 BERT 模型.本文是一 ...

  6. RMAN快速入门指南

    RMAN快速入门指南   1. What is RMAN? 什么是RMAN?    4 2. Terminology 专业词汇解释    4 2.1. Backup sets 备份集合    4 2. ...

  7. 150页书籍《PyTorch 深度学习快速入门指南》附PDF电子版

    为什么说是极简教程,首先本书只涵盖了150页.内容比较精简,特别适合作为 PyTorch 深度学习的入门书籍.为什么这么说呢?因为很多时候,一份厚重的书籍往往会削弱我们学习的积极性,在学习一门新的语言 ...

  8. h5py快速入门指南

    h5py是Python语言用来操作HDF5的模块.下面的文章主要介绍h5py的快速入门指南,翻译自h5py的官方文档:http://docs.h5py.org/en/lates... .该翻译仅为个人 ...

  9. 2017 Vue.js 2快速入门指南

    注意,据部分读者反映本文水多,怕湿身者勿进.后续推荐详解 Vue & Vuex 实践 2017 Vue.js 2快速入门指南翻译自Vue.js 2 Quickstart Tutorial 20 ...

最新文章

  1. linux centos7 替换yum源
  2. python的replace第i个位置_《原神》第80个绯红玉髓位置一览 第80个绯红玉髓如何获取...
  3. tidb mysql5.7_MYSQL5.7实时同步数据到TiDB
  4. 载波聚合或双连接的方式进行_处理载波聚合及双连接的装置及方法与流程
  5. ZooKeeper(三) 什么是分布式锁以及使用Redis手写实现
  6. BS4 find_all
  7. HTML、CSS、JS对unicode编码字符的规则
  8. 关于mysql使用命令行时出现Data too long for column的解决方案:
  9. 【NOIP 模拟赛】Evensgn 剪树枝 树形dp
  10. Atitit.日志系统slf4j的使用
  11. java使用pdfbox将图片转换成pdf
  12. 11 Django REST Framework 针对基于类的视图添加 @csrf_exempt
  13. Spring/Boot/Cloud系列知识(2)— — 代理模式
  14. 线程的一生(通俗易懂)
  15. (附源码)springboot奖助学金评审系统 毕业设计 031035
  16. 电力系统| IEEE论文投稿流程
  17. python中input是什么_Python中input函数的用法是什么?_后端开发
  18. 基于QGraphicsView的简易画板EasyCanvas -- 第一版
  19. 加拿大商标交易的要点
  20. 夜神模拟器如何连接电脑WiFi

热门文章

  1. bootstrap validator简单非空校验(data-bv-notempty)
  2. 三层架构:表示层-业务逻辑层-数据访问层2
  3. No1-Java开发预科计算机基础知识
  4. iOS 修改工程名字
  5. [报错解决]_pickle.PicklingError: Can‘t pickle <class ‘__main__.Net‘>: attribute lookup Net on __main__ f
  6. 专业级沙箱与恶意样本的自动化分析
  7. [强烈推荐]Mini Delphi 2005 v1.2 For Win32 绿色便携版
  8. java函数练习题_Java 函数 编程练习题
  9. 局域网安全----接入层安全
  10. Java毕设项目演唱会网上订票购票系统计算机(附源码+系统+数据库+LW)