linux http 测试页面,使用 HTTPie 进行 API 测试 | Linux 中国

原标题:使用 HTTPie 进行 API 测试 | Linux 中国

059e19613d3e82a7a256186a61ee2f24.png

使用 HTTPie 调试 API,这是一个用 Python 写的易用的命令行工具。

-- Moshe Zadka

是一个非常易用、易于升级的 HTTP 客户端。它的发音为 “aitch-tee-tee-pie” 并以 命令运行,它是一个用 Python 编写的来用于访问 Web 的命令行工具。

由于这是一篇关于 HTTP 客户端的指导文章,因此你需要一个 HTTP 服务器来试用它。在这里,访问 ,它是一个简单的开源 HTTP 请求和响应服务。httpbin.org 网站是一种测试 Web API 的强大方式,并能仔细管理并显示请求和响应内容,不过现在让我们专注于 HTTPie 的强大功能。

Wget 和 cURL 的替代品

你可能听说过古老的 或稍微新一些的 工具,它们允许你从命令行访问 Web。它们是为访问网站而编写的,而 HTTPie 则用于访问 Web API。

网站请求发生在计算机和正在阅读并响应它所看到的内容的最终用户之间,这并不太依赖于结构化的响应。但是,API 请求会在两台计算机之间进行结构化调用,人并不是该流程内的一部分,像 HTTPie 这样的命令行工具的参数可以有效地处理这个问题。

安装 HTTPie

有几种方法可以安装 HTTPie。你可以通过包管理器安装,无论你使用的是 brew、apt、yum 还是 dnf。但是,如果你已配置 ,那么你可以用自己的方式安装:

$ mkvirtualenv httpie

...

(httpie)$ pip install httpie

...

(httpie)$ deactivate

$aliashttp=~/.virtualenvs/httpie/bin/http

$ http-b GET https://httpbin.org/get

{

"args":{},

"headers":{

"Accept":"*/*",

"Accept-Encoding":"gzip, deflate",

"Host":"httpbin.org",

"User-Agent":"HTTPie/1.0.2"

},

"origin":"104.220.242.210, 104.220.242.210",

"url":"https://httpbin.org/get"

}

通过将 别名指向为虚拟环境中的命令,即使虚拟环境在非活动状态,你也可以运行它。你可以将 alias 命令放在 .bash_profile 或 .bashrc 中,这样你就可以使用以下命令升级 HTTPie:

$~/.virtualenvs/httpie/bin/pip install-U pip

使用 HTTPie 查询网站

HTTPie 可以简化查询和测试 API。上面使用了一个选项,-b(即 --body)。没有它,HTTPie 将默认打印整个响应,包括响应头:

$ http GET https://httpbin.org/get

HTTP/1.1200OK

Access-Control-Allow-Credentials:true

Access-Control-Allow-Origin:*

Connection:keep-alive

Content-Encoding:gzip

Content-Length:177

Content-Type:application/json

Date:Fri,09Aug201920:19:47GMT

Referrer-Policy:no-referrer-when-downgrade

Server:nginx

X-Content-Type-Options:nosniff

X-Frame-Options:DENY

X-XSS-Protection:1;mode=block

{

"args":{},

"headers":{

"Accept":"*/*",

"Accept-Encoding":"gzip, deflate",

"Host":"httpbin.org",

"User-Agent":"HTTPie/1.0.2"

},

"origin":"104.220.242.210, 104.220.242.210",

"url":"https://httpbin.org/get"

}

这在调试 API 服务时非常重要,因为大量信息在响应头中发送。例如,查看发送的 cookie 通常很重要。httpbin.org 提供了通过 URL 路径设置 cookie(用于测试目的)的方式。以下设置一个标题为 opensource, 值为 awesome 的 cookie:

$ http GET https://httpbin.org/cookies/set/opensource/awesome

HTTP/1.1302FOUND

Access-Control-Allow-Credentials:true

Access-Control-Allow-Origin:*

Connection:keep-alive

Content-Length:223

Content-Type:text/html;charset=utf-8

Date:Fri,09Aug201920:22:39GMT

Location:/cookies

Referrer-Policy:no-referrer-when-downgrade

Server:nginx

Set-Cookie:opensource=awesome;Path=/

X-Content-Type-Options:nosniff

X-Frame-Options:DENY

X-XSS-Protection:1;mode=block

Redirecting...

Redirecting...

Youshould be redirected automatically to target URL:

/cookies.Ifnotclick thelink.

注意 Set-Cookie: opensource=awesome; Path=/ 的响应头。这表明你预期设置的 cookie 已正确设置,路径为 /。另请注意,即使你得到了 302 重定向, 也不会遵循它。如果你想要遵循重定向,则需要明确使用 --follow 标志请求:

$ http--follow GET https://httpbin.org/cookies/set/opensource/awesome

HTTP/1.1200OK

Access-Control-Allow-Credentials:true

Access-Control-Allow-Origin:*

Connection:keep-alive

Content-Encoding:gzip

Content-Length:66

Content-Type:application/json

Date:Sat,10Aug201901:33:34GMT

Referrer-Policy:no-referrer-when-downgrade

Server:nginx

X-Content-Type-Options:nosniff

X-Frame-Options:DENY

X-XSS-Protection:1;mode=block

{

"cookies":{

"opensource":"awesome"

}

}

但此时你无法看到原来的 Set-Cookie 头。为了看到中间响应,你需要使用 --all:

$ http--headers--all--follow GET https://httpbin.org/cookies/set/opensource/awesome

HTTP/1.1302FOUND

Access-Control-Allow-Credentials:true

Access-Control-Allow-Origin:*

Content-Type:text/html;charset=utf-8

Date:Sat,10Aug201901:38:40GMT

Location:/cookies

Referrer-Policy:no-referrer-when-downgrade

Server:nginx

Set-Cookie:opensource=awesome;Path=/

X-Content-Type-Options:nosniff

X-Frame-Options:DENY

X-XSS-Protection:1;mode=block

Content-Length:223

Connection:keep-alive

HTTP/1.1200OK

Access-Control-Allow-Credentials:true

Access-Control-Allow-Origin:*

Content-Encoding:gzip

Content-Type:application/json

Date:Sat,10Aug201901:38:41GMT

Referrer-Policy:no-referrer-when-downgrade

Server:nginx

X-Content-Type-Options:nosniff

X-Frame-Options:DENY

X-XSS-Protection:1;mode=block

Content-Length:66

Connection:keep-alive

打印响应体并不有趣,因为你大多数时候只关心 cookie。如果你想看到中间请求的响应头,而不是最终请求中的响应体,你可以使用:

$ http--printhb--history-printh--all--follow GET https://httpbin.org/cookies/set/opensource/awesome

HTTP/1.1302FOUND

Access-Control-Allow-Credentials:true

Access-Control-Allow-Origin:*

Content-Type:text/html;charset=utf-8

Date:Sat,10Aug201901:40:56GMT

Location:/cookies

Referrer-Policy:no-referrer-when-downgrade

Server:nginx

Set-Cookie:opensource=awesome;Path=/

X-Content-Type-Options:nosniff

X-Frame-Options:DENY

X-XSS-Protection:1;mode=block

Content-Length:223

Connection:keep-alive

HTTP/1.1200OK

Access-Control-Allow-Credentials:true

Access-Control-Allow-Origin:*

Content-Encoding:gzip

Content-Type:application/json

Date:Sat,10Aug201901:40:56GMT

Referrer-Policy:no-referrer-when-downgrade

Server:nginx

X-Content-Type-Options:nosniff

X-Frame-Options:DENY

X-XSS-Protection:1;mode=block

Content-Length:66

Connection:keep-alive

{

"cookies":{

"opensource":"awesome"

}

}

你可以使用 --print 精确控制打印的内容(h:响应头;b:响应体),并使用 --history-print 覆盖中间请求的打印内容设置。

使用 HTTPie 下载二进制文件

有时响应体并不是文本形式,它需要发送到可被不同应用打开的文件:

$ http GET https://httpbin.org/image/jpeg

HTTP/1.1200OK

Access-Control-Allow-Credentials:true

Access-Control-Allow-Origin:*

Connection:keep-alive

Content-Length:35588

Content-Type:image/jpeg

Date:Fri,09Aug201920:25:49GMT

Referrer-Policy:no-referrer-when-downgrade

Server:nginx

X-Content-Type-Options:nosniff

X-Frame-Options:DENY

X-XSS-Protection:1;mode=block

+-----------------------------------------+

|NOTE:binary datanotshowninterminal|

+-----------------------------------------+

要得到正确的图片,你需要保存到文件:

$ http--download GET https://httpbin.org/image/jpeg

HTTP/1.1200OK

Access-Control-Allow-Credentials:true

Access-Control-Allow-Origin:*

Connection:keep-alive

Content-Length:35588

Content-Type:image/jpeg

Date:Fri,09Aug201920:28:13GMT

Referrer-Policy:no-referrer-when-downgrade

Server:nginx

X-Content-Type-Options:nosniff

X-Frame-Options:DENY

X-XSS-Protection:1;mode=block

Downloading34.75kB to"jpeg.jpe"

Done.34.75kBin0.00068s(50.05MB/s)

试一下!图片很可爱。

使用 HTTPie 发送自定义请求

你可以发送指定的请求头。这对于需要非标准头的自定义 Web API 很有用:

$ http GET https://httpbin.org/headers X-Open-Source-Com:Awesome

{

"headers":{

"Accept":"*/*",

"Accept-Encoding":"gzip, deflate",

"Host":"httpbin.org",

"User-Agent":"HTTPie/1.0.2",

"X-Open-Source-Com":"Awesome"

}

}

最后,如果要发送 JSON 字段(尽管可以指定确切的内容),对于许多嵌套较少的输入,你可以使用快捷方式:

$ http--body PUT https://httpbin.org/anything open-source=awesome author=moshez

{

"args":{},

"data":"{"open-source": "awesome", "author": "moshez"}",

"files":{},

"form":{},

"headers":{

"Accept":"application/json, */*",

"Accept-Encoding":"gzip, deflate",

"Content-Length":"46",

"Content-Type":"application/json",

"Host":"httpbin.org",

"User-Agent":"HTTPie/1.0.2"

},

"json":{

"author":"moshez",

"open-source":"awesome"

},

"method":"PUT",

"origin":"73.162.254.113, 73.162.254.113",

"url":"https://httpbin.org/anything"

}

下次在调试 Web API 时,无论是你自己的还是别人的,记得放下 cURL,试试 HTTPie 这个命令行工具。

作者: 选题: 译者: 校对:

本文由 原创编译, 荣誉推出返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值