日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

使用 HTTPie 進行 API 測試

 

使用 HTTPie 調(diào)試 API,這是一個用 Python 寫的易用的命令行工具。

-- Moshe Zadka(作者)

HTTPie 是一個非常易用、易于升級的 HTTP 客戶端。它的發(fā)音為 “aitch-tee-tee-pie” 并以 http 命令運行,它是一個用 Python 編寫的來用于訪問 Web 的命令行工具。

由于這是一篇關(guān)于 HTTP 客戶端的指導(dǎo)文章,因此你需要一個 HTTP 服務(wù)器來試用它。在這里,訪問 httpbin.org ,它是一個簡單的開源 HTTP 請求和響應(yīng)服務(wù)。httpbin.org 網(wǎng)站是一種測試 Web API 的強大方式,并能仔細管理并顯示請求和響應(yīng)內(nèi)容,不過現(xiàn)在讓我們專注于 HTTPie 的強大功能。

Wget 和 cURL 的替代品

你可能聽說過古老的 Wget 或稍微新一些的 cURL 工具,它們允許你從命令行訪問 Web。它們是為訪問網(wǎng)站而編寫的,而 HTTPie 則用于訪問 Web API。

網(wǎng)站請求發(fā)生在計算機和正在閱讀并響應(yīng)它所看到的內(nèi)容的最終用戶之間,這并不太依賴于結(jié)構(gòu)化的響應(yīng)。但是,API 請求會在兩臺計算機之間進行結(jié)構(gòu)化調(diào)用,人并不是該流程內(nèi)的一部分,像 HTTPie 這樣的命令行工具的參數(shù)可以有效地處理這個問題。

安裝 HTTPie

有幾種方法可以安裝 HTTPie。你可以通過包管理器安裝,無論你使用的是 brew、apt、yum 還是 dnf。但是,如果你已配置 virtualenvwrApper ,那么你可以用自己的方式安裝:

$ mkvirtualenv httpie
...
(httpie) $ pip install httpie
...
(httpie) $ deactivate
$ alias http=~/.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"
}

通過將 http 別名指向為虛擬環(huán)境中的命令,即使虛擬環(huán)境在非活動狀態(tài),你也可以運行它。你可以將 alias 命令放在 .bash_profile 或 .bashrc 中,這樣你就可以使用以下命令升級 HTTPie:

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

使用 HTTPie 查詢網(wǎng)站

HTTPie 可以簡化查詢和測試 API。上面使用了一個選項,-b(即 --body)。沒有它,HTTPie 將默認打印整個響應(yīng),包括響應(yīng)頭:

$ http GET https://httpbin.org/get
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 177
Content-Type: application/json
Date: Fri, 09 Aug 2019 20:19:47 GMT
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"
}

這在調(diào)試 API 服務(wù)時非常重要,因為大量信息在響應(yīng)頭中發(fā)送。例如,查看發(fā)送的 cookie 通常很重要。httpbin.org 提供了通過 URL 路徑設(shè)置 cookie(用于測試目的)的方式。以下設(shè)置一個標題為 opensource, 值為 awesome 的 cookie:

$ http GET https://httpbin.org/cookies/set/opensource/awesome
HTTP/1.1 302 FOUND
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 223
Content-Type: text/html; charset=utf-8
Date: Fri, 09 Aug 2019 20:22:39 GMT
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL:
<a href="/cookies">/cookies</a>. If not click the link.

注意 Set-Cookie: opensource=awesome; Path=/ 的響應(yīng)頭。這表明你預(yù)期設(shè)置的 cookie 已正確設(shè)置,路徑為 /。另請注意,即使你得到了 302 重定向,http 也不會遵循它。如果你想要遵循重定向,則需要明確使用 --follow 標志請求:

$ http --follow GET https://httpbin.org/cookies/set/opensource/awesome
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 66
Content-Type: application/json
Date: Sat, 10 Aug 2019 01:33:34 GMT
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 頭。為了看到中間響應(yīng),你需要使用 --all:

$ http --headers --all --follow GET https://httpbin.org/cookies/set/opensource/awesome
HTTP/1.1 302 FOUND
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Content-Type: text/html; charset=utf-8
Date: Sat, 10 Aug 2019 01:38:40 GMT
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.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Content-Encoding: gzip
Content-Type: application/json
Date: Sat, 10 Aug 2019 01:38:41 GMT
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

打印響應(yīng)體并不有趣,因為你大多數(shù)時候只關(guān)心 cookie。如果你想看到中間請求的響應(yīng)頭,而不是最終請求中的響應(yīng)體,你可以使用:

$ http --print hb --history-print h --all --follow GET https://httpbin.org/cookies/set/opensource/awesome
HTTP/1.1 302 FOUND
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Content-Type: text/html; charset=utf-8
Date: Sat, 10 Aug 2019 01:40:56 GMT
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.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Content-Encoding: gzip
Content-Type: application/json
Date: Sat, 10 Aug 2019 01:40:56 GMT
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 精確控制打印的內(nèi)容(h:響應(yīng)頭;b:響應(yīng)體),并使用 --history-print 覆蓋中間請求的打印內(nèi)容設(shè)置。

使用 HTTPie 下載二進制文件

有時響應(yīng)體并不是文本形式,它需要發(fā)送到可被不同應(yīng)用打開的文件:

$ http GET https://httpbin.org/image/jpeg
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 35588
Content-Type: image/jpeg
Date: Fri, 09 Aug 2019 20:25:49 GMT
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 data not shown in terminal |
+-----------------------------------------+

要得到正確的圖片,你需要保存到文件:

$ http --download GET https://httpbin.org/image/jpeg
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 35588
Content-Type: image/jpeg
Date: Fri, 09 Aug 2019 20:28:13 GMT
Referrer-Policy: no-referrer-when-downgrade
Server: nginx
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Downloading 34.75 kB to "jpeg.jpe"
Done. 34.75 kB in 0.00068s (50.05 MB/s)

試一下!圖片很可愛。

使用 HTTPie 發(fā)送自定義請求

你可以發(fā)送指定的請求頭。這對于需要非標準頭的自定義 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"
 }
}

最后,如果要發(fā)送 JSON 字段(盡管可以指定確切的內(nèi)容),對于許多嵌套較少的輸入,你可以使用快捷方式:

$ 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"
}

下次在調(diào)試 Web API 時,無論是你自己的還是別人的,記得放下 cURL,試試 HTTPie 這個命令行工具。


via: https://opensource.com/article/19/8/getting-started-httpie

作者: Moshe Zadka 選題: lujun9972 譯者: geekpi 校對: wxy

本文由 LCTT 原創(chuàng)編譯, linux中國 榮譽推出

分享到:
標簽:測試 API
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定