python笔记42-http请求命令行工具(httpie)

  • 2019 年 10 月 6 日
  • 筆記

前言

通常我们需要快速的测试某个接口通不通,一般linux上用curl去发http请求,但是这个命令行工具语法有点复杂了,不够直观。 python有一个给人类使用的requests库,非常的简单方便。httpie就是基于requests开发的,给人类用的命令行工具,取代curl的绝佳工具。

环境安装

pip install httpie==1.0.3

查看版本号

C:Usersdell>pip show httpie  Name: httpie  Version: 1.0.3  Summary: HTTPie - a CLI, cURL-like tool for humans.  Home-page: http://httpie.org/  Author: Jakub Roztocil  Author-email: [email protected]  License: BSD  Location: e:python36libsite-packages  Requires: requests, colorama, Pygments  Required-by:

发送GET请求

get请求不需要带body参数,所以不带参数,会被默认识别成get请求

http http://127.0.0.1:8000/info

访问后查看结果,就是这么高效!

C:Usersdell>http http://127.0.0.1:8000/info  HTTP/1.1 200 OK  Allow: GET, POST, HEAD, OPTIONS  Content-Length: 290  Content-Type: application/json  Date: Wed, 18 Sep 2019 14:21:25 GMT  Server: WSGIServer/0.2 CPython/3.6.0  Vary: Accept, Cookie  X-Frame-Options: SAMEORIGIN    [      {          "age": 20,          "create_time": "2019-09-15",          "id": 1,          "mail": "[email protected]",          "name": "yoyo",          "sex": "M"      },      {          "age": 444444,          "create_time": "2019-09-18",          "id": 6,          "mail": "[email protected]",          "name": "yoyo",          "sex": "M"      }  ]

POST请求

GET请求是默认不带body部分的,那么带上body部分的参数,肯定会识别成POST请求,所以也不用声明请求类型。 一般接口是json类型的,所以头部请求参数类型Content-Type默认是application/json

接下来发个POST请求,比如我要发送的报文是这样的

POST http://127.0.0.1:8000/info HTTP/1.1  Host: 127.0.0.1:8000  User-Agent: HTTPie/1.0.3  Accept-Encoding: gzip, deflate  Accept: application/json, */*  Connection: keep-alive  Content-Type: application/json  Content-Length: 63    {"name": "yoyo", "sex": "M", "age": "20", "mail": "[email protected]"}

那么用httpie的命令行只需下面简单的一行,如果参数是字符串,可以用key=value格式,如果参数不是字符串,那么用key:=value

http http://127.0.0.1:8000/info name=yoyo sex=M age=20 [email protected]

C:Usersdell>http http://127.0.0.1:8000/info name=yoyo sex=M age=20 [email protected]  HTTP/1.1 200 OK  Allow: GET, POST, HEAD, OPTIONS  Content-Length: 95  Content-Type: application/json  Date: Wed, 18 Sep 2019 14:22:22 GMT  Server: WSGIServer/0.2 CPython/3.6.0  Vary: Accept, Cookie  X-Frame-Options: SAMEORIGIN    {      "data": {          "age": "20",          "mail": "[email protected]",          "name": "yoyo",          "sex": "M"      },      "message": "create some data!"  }

json文件导入

如果json的参数较多,可以把请求参数写到一个json文件,如test.json

{      "name": "yoyo",      "sex": "M",      "age": "20",      "mail": "[email protected]"  }

接下来发请求的时候,导入这个json文件就可以

http http://127.0.0.1:8000/info < test.json

测试结果

D:>http http://127.0.0.1:8000/info < test.json  HTTP/1.1 200 OK  Allow: GET, POST, HEAD, OPTIONS  Content-Length: 95  Content-Type: application/json  Date: Wed, 18 Sep 2019 14:46:36 GMT  Server: WSGIServer/0.2 CPython/3.6.0  Vary: Accept, Cookie  X-Frame-Options: SAMEORIGIN    {      "data": {          "age": "20",          "mail": "[email protected]",          "name": "yoyo",          "sex": "M"      },      "message": "create some data!"  }

—help查看配置参数

使用—help查看更多配置参数

http —help

显示详细的请求,显示请求的头部和返回的内容

http -v

只显示Header

http -h

只显示Body

http -b

下载文件

http -d

使用http代理

http —proxy=http:http://xxx:x