国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

HTTPie 官方文檔中文翻譯版

Baaaan / 1162人閱讀

摘要:目標(biāo)是讓與的交互盡可能的更友好。在版本以上已經(jīng)成為了默認(rèn)的版本。不同類型的鍵值對(duì)分割符號(hào)分別是。這將會(huì)協(xié)商服務(wù)端和你安裝的支持的最高協(xié)議版本。

博客原文?

HTTPie 是一個(gè)命令行 HTTP 客戶端。目標(biāo)是讓 CLI 與 Web services 的交互盡可能的更友好。它提供了一個(gè)簡單的 http 命令,可以讓我們用簡單自然的表述發(fā)送任意 HTTP 請(qǐng)求,并且可以輸出帶代碼高亮的結(jié)果。HTTPie 可以使用在測試、調(diào)試以及通用的與 HTTP 交互場景

主要功能特性

自然而且簡單的命令語句

格式化且高亮顯示輸出內(nèi)容

內(nèi)置 JSON 支持

表單和文件上傳

支持 HTTPS, 代理和授權(quán)驗(yàn)證

支持多樣化的請(qǐng)求數(shù)據(jù)格式

自定義 headers 頭

持久 sessions 存儲(chǔ)

類似 wget 的下載模式

兼容 Python 2.6, 2.7 以及 3.x

支持 Linux, macOS 和 Windows 操作系統(tǒng)

插件支持

詳細(xì)的文檔說明

完善的測試用例覆蓋

安裝 macOS

在 macOS 系統(tǒng)中推薦使用 Homebrew 來安裝:

brew install httpie

當(dāng)然 MacPorts 也是可以的:

port install httpie
Linux

大多數(shù)的 Linux 構(gòu)建版都提供了包管理組件,可以使用他們來安裝:

# 基于 Debian Linux 的構(gòu)建版,比如 Ubuntu
apt-get install httpie

# 基于 RPM Linux 的構(gòu)建版
yum install httpie

# Arch Linux 系統(tǒng)
pacman -S httpie
Windows 及其它

使用 pip 是一種通用的(可以使用在 Windows, MacOS, Linux ...)并且提供最新版本安裝包的安裝方法

# 確保使用了最新版本的 pip 和 setuptools:
pip install --upgrade pip setuptools

pip install --upgrade httpie
開發(fā)版

最新的開發(fā)版本可以直接通過 github 安裝

# Homebrew
brew install httpie --HEAD

# pip
pip install --upgrade https://github.com/jkbrzt/httpie/archive/master.tar.gz
Python 版本

雖然兼容 Python 2.6, 2.7 版本的,但是如果可以的話還是建議使用最新版的 Python 3.x 來安裝 HTTPie。這將保證一些比較新的功能(比如:SNI )可以開箱即用。Python 3 在 Homebrew 0.9.4 版本以上已經(jīng)成為了默認(rèn)的 Python 版本。可以使用 http --debug 來查看 HTTPie 使用的 python 版本

使用

最簡單的使用:

http httpie.org

使用語法:

http [flags] [METHOD] URL [ITEM [ITEM]]

也可以使用 http --help 來查看更多使用方法:

例子

自定義 HTTP 方法,HTTP 頭和 JSON 數(shù)據(jù):

http PUT example.org X-API-Token:123 name=John

表單提交:

http -f POST example.org hello=World

使用一個(gè)輸出參數(shù) -v 來查看請(qǐng)求信息(默認(rèn)不顯示請(qǐng)求信息):

http -v example.org

使用 Github API 向 issue 發(fā)送一條評(píng)論(需要授權(quán)驗(yàn)證參數(shù)):

http -a USERNAME POST https://api.github.com/repos/jkbrzt/httpie/issues/83/comments body="HTTPie is awesome! :heart:"

通過命令行的輸入重定向上傳文件:

http example.org < file.json

使用 wget 風(fēng)格下載文件:

http --download example.org/file

使用命令會(huì)話對(duì)同一 host 進(jìn)行請(qǐng)求之間的持久通信:

http --session=logged-in -a username:password httpbin.org/get API-Key:123
http --session=logged-in httpbin.org/headers

自定義請(qǐng)求 host 頭:

http localhost:8000 Host:example.com
HTTP 方法

HTTP 方法的名稱在 URL 參數(shù)之前:

http DELETE example.org/todos/7

這看起來就像是原生的 HTTP 請(qǐng)求發(fā)送的文本一樣:

DELETE /todos/7 HTTP/1.1
請(qǐng)求 URL

HTTPie 唯一必傳的一個(gè)參數(shù)是請(qǐng)求 URL,默認(rèn)的方案不出意料的是
http://,可以在請(qǐng)求的時(shí)候缺省 - http example.org 是沒問題的

Querystring 參數(shù)

如果需要在命令行手動(dòng)構(gòu)建 URLs,你可能會(huì)覺得使用 param==value 添加參數(shù)的方式是比較方便的,這樣你就不需要擔(dān)心命令行中轉(zhuǎn)義鏈接字符串 & 的問題,當(dāng)然參數(shù)中的特殊字符也將被自動(dòng)轉(zhuǎn)義(除非已經(jīng)轉(zhuǎn)義過)。用下面的命令搜索 HTTPie logo 可以在 google 圖片上結(jié)果:

http www.google.com search=="HTTPie logo" tbm==isch

GET /?search=HTTPie+logo&tbm=isch HTTP/1.1
localhost 的 URL 縮寫

另外,類似 curl 的 localhost 縮寫也是支持的。這表示你可以使用 :3000 來代替
http://localhost:3000, 如果不傳入端口號(hào),80 將會(huì)默認(rèn)被使用

http :/foo

GET /foo HTTP/1.1
Host: localhost
http :3000/bar

GET /bar HTTP/1.1
Host: localhost:3000
http :

GET / HTTP/1.1
Host: localhost
自定義默認(rèn)的方案

你可以使用 --default-scheme 參數(shù)來指定非 HTTP 的其它協(xié)義

alias https="http --default-scheme=https"
請(qǐng)求項(xiàng)

不同的請(qǐng)求項(xiàng)類型提供一種便捷的方法來指定 HTTP 頭、簡單的 JSON
、表單數(shù)據(jù)、文件、URL 參數(shù)

URL 參數(shù)后面緊隨的是 鍵/值 對(duì)參數(shù)都會(huì)被拼裝成請(qǐng)求發(fā)送。不同類型的 鍵/值
對(duì)分割符號(hào)分別是::, =, :=, @, =@, :=@。用 @
分割的參數(shù)表示文件路徑

項(xiàng)類型(item type) 描述(Description)
HTTP 頭參數(shù)
Name:Value
任意的 HTTP 頭,比如:X-API-Token:123
URL 參數(shù)
name==value
通過分割符 == 表示一個(gè)查詢字符串的 鍵/值 對(duì)
數(shù)據(jù)域
field=value,
field=@file.txt
請(qǐng)求一個(gè)默認(rèn)會(huì)被序列化成 JSON 的數(shù)據(jù)域,或者表單類型 form-encoded(--form, -f)
純 JSON 域
field:=json,
field:=@file.json
當(dāng)需要指定一個(gè)或者多數(shù)域參數(shù)類型 boolean, number .. 時(shí)非常有用, 比如:meals:="["ham","spam"]" or pies:=[1,2,3] (注意引號(hào)).
Form 表單文件域 僅當(dāng)傳入?yún)?shù) --form, -f 時(shí)有效,比如 screenshot@~/Pictures/img.png 文件內(nèi)容將會(huì)被序列化成 multipart/form-data 發(fā)送

數(shù)據(jù)域不是唯一的指定請(qǐng)求數(shù)據(jù)的方式,重定向輸入也可以

字符轉(zhuǎn)義規(guī)則

可以使用 來轉(zhuǎn)義不應(yīng)該被用于分割符的情況。比如 foo==bar
會(huì)被轉(zhuǎn)義成一個(gè)數(shù)據(jù)鍵值對(duì)(foo= 和 bar)而不是 URL 參數(shù)

通常情況需要使用引號(hào)包圍值,比如 foo="bar baz"

如果有一個(gè)域的名字或者 header 以減號(hào)開頭,你需要把這些參數(shù)放在一個(gè)特殊符號(hào) -- 后面
,這樣做是為了和 --arguments 區(qū)分開

http httpbin.org/post  --  -name-starting-with-dash=foo -Unusual-Header:bar

POST /post HTTP/1.1
-Unusual-Header: bar
Content-Type: application/json

{
    "-name-starting-with-dash": "value"
}
JSON

JSON 是現(xiàn)代 web services 通用規(guī)范,HTTPie 也默認(rèn)遵循了它的 不嚴(yán)格的數(shù)據(jù)類型

http PUT example.org name=John email=john@example.org

PUT / HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Content-Type: application/json
Host: example.org

{
    "name": "John",
    "email": "john@example.org"
}
默認(rèn)行為

如果你的命令包含了一些請(qǐng)求項(xiàng)數(shù)據(jù),它們將默認(rèn)被序列化成 JSON 對(duì)象。HTTPie
會(huì)默認(rèn)自動(dòng)添加下面兩個(gè) header 頭,當(dāng)然這兩個(gè)頭也可以重新傳入

Content-Type application/json
Accept application/json, */*
明確的 JSON

你可以使用命令行參數(shù) --json, -j 明確地設(shè)置 Acceptapplication/json
而無需在意發(fā)送的數(shù)據(jù)是什么(這是個(gè)快捷方式,也可以使用普通的 header 注解:`http
url Accept:"application/json, /"`),另外,HTTPie 會(huì)試著檢測 JSON 響應(yīng),即使
Content-Type 是不正常的 text/plain 或者未知類型

非字符串的 JSON 域

非字符串類型的 JSON 域使用 := 分割,這可以允許你嵌入原生純 JSON
到結(jié)果對(duì)象,文本和原生的純 JSNO 文件也可以使用 =@:=G 嵌入

http PUT api.example.com/person/1 
    name=John 
    age:=29 married:=false hobbies:="["http", "pies"]"   # Raw JSON
    description=@about-john.txt    # Embed text file
    bookmarks:=@bookmarks.json      # Embed JSON file

PUT /person/1 HTTP/1.1
Accept: application/json, */*
Content-Type: application/json
Host: api.example.com

{
    "age": 29,
    "hobbies": [
        "http",
        "pies"
    ],
    "description": "John is a nice guy who likes pies.",
    "married": false,
    "name": "John",
    "bookmarks": {
        "HTTPie": "http://httpie.org",
    }
}

不過請(qǐng)注意,當(dāng)發(fā)送復(fù)雜數(shù)據(jù)的時(shí)候,這個(gè)例子使用的語法會(huì)顯得很笨重。在這種情況下 重定向輸入 將會(huì)更合適:

http POST api.example.com/person/1 < person.json
表單

提交表單和發(fā)送 JSON 請(qǐng)求很相似,通常情況下唯一的不同是添加額外的 --form, -f
參數(shù),這將確保數(shù)據(jù)域和 Content-Type 被設(shè)置成 application/x-www-form-urlencoded; charset=utf-8

普通的表單
http --form POST api.example.org/person/1 name="John Smith"

POST /person/1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8

name=John+Smith
文件上傳表單

如果有一個(gè)文件域,序列化方式和 content type 會(huì)是 multipart/form-data

http -f POST example.com/jobs name="John Smith" cv@~/Documents/cv.pdf

上面的請(qǐng)求和下面的 HTML 表單發(fā)送請(qǐng)求是一樣的:

注意 @ 用來模擬文件上傳域,而 =@
是把文件內(nèi)容以文本的方式嵌入到數(shù)據(jù)域的值里面

HTTP 頭

可以使用 Header:Value 注解的形式來添加自定義頭信息

http example.org  User-Agent:Bacon/1.0  "Cookie:valued-visitor=yes;foo=bar"  
    X-Foo:Bar  Referer:http://httpie.org/

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Cookie: valued-visitor=yes;foo=bar
Host: example.org
Referer: http://httpie.org/
User-Agent: Bacon/1.0
X-Foo: Bar
默認(rèn)的請(qǐng)求頭

有幾個(gè)默認(rèn)的請(qǐng)求頭是 HTTPie 設(shè)置的

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: HTTPie/
Host: 
空頭和重新設(shè)置默認(rèn)頭

可以使用 Header: 來取消上面的幾個(gè)默認(rèn)頭信息

http httpbin.org/headers Accept: User-Agent:

請(qǐng)求中的 AcceptUser-Agent 頭都會(huì)被移除

使用 Header; 表示添加一個(gè)為空的頭信息,注意須使用引號(hào)

http -v httpbin.org/headers "Host;"

GET /headers HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host:
User-Agent: HTTPie/0.9.9
...
授權(quán)驗(yàn)證

目前支持的驗(yàn)證方案有基礎(chǔ)和摘要兩種(查看更多 授權(quán)插件),有兩種標(biāo)識(shí)來控制驗(yàn)證:

參數(shù) 說明
--auth, -a 用戶名:密碼 做為鍵值對(duì)參數(shù)傳入,如果只指定用戶名可以使用 -a 用戶名,密碼在接下來的提示符中輸入,空密碼使用 username:username:password@hostname 格式的 URL 語法也是支持的,證書通過 -a 參數(shù)傳入且具有更高的優(yōu)先級(jí)
--auth-type, -A 指定指定身份驗(yàn)證機(jī)制。basic(默認(rèn)) 和 digest 兩種
Basic 授權(quán)
http -a username:password example.org
Digest 授權(quán)
http -A digest -a username:password example.org
密碼提示
http -a username example.org
.netrc

從你的 ~/.netrc 文件授權(quán)也可以

cat ~/.netrc
machine httpbin.org
login httpie
password test

http httpbin.org/basic-auth/httpie/test
HTTP/1.1 200 OK
[...]
授權(quán)插件

授權(quán)機(jī)制可以使用安裝插件的方式來實(shí)現(xiàn),可以在 Python Package 上面找到更多相關(guān)插件

httpie-api-auth: ApiAuth

httpie-aws-auth: AWS / Amazon S3

httpie-edgegrid: EdgeGrid

httpie-hmac-auth: HMAC

httpie-jwt-auth: JWTAuth (JSON Web Tokens)

httpie-negotiate: SPNEGO (GSS Negotiate)

httpie-ntlm: NTLM (NT LAN Manager)

httpie-oauth: OAuth

requests-hawk: Hawk

HTTP 重定向

HTTP 重定向默認(rèn)不會(huì)自動(dòng)跳轉(zhuǎn),請(qǐng)求發(fā)出后命令行只會(huì)顯示 第一次 收到的響應(yīng)

http httpbin.org/redirect/3
按 header 頭中的 location 字段值跳轉(zhuǎn)

指定 --follow, -F 參數(shù)讓 HTTPie 自動(dòng)跟隨 30x 響應(yīng)頭中的 location
字段值進(jìn)行跳轉(zhuǎn),并且顯示最終的響應(yīng)內(nèi)容

http --follow httpbin.org/redirect/3
顯示中間的跳轉(zhuǎn)響應(yīng)

如果你也想看到更多的跳轉(zhuǎn)信息,可以指定 --all 參數(shù)

http --follow --all httpbin.org/redirect/3
限制重定向最大次數(shù)

改變默認(rèn)最大 30 次重定向值可以使用 --max-redirects= 參數(shù)

http --follow --all --max-redirects=5 httpbin.org/redirect/3
代理

你可以通過添加參數(shù) --proxy 來指定各自協(xié)義(為了防止跨協(xié)義的重定向,協(xié)義被包含在了參數(shù)值中)的代理服務(wù)器

http --proxy=http:http://10.10.1.10:3128 --proxy=https:https://10.10.1.10:1080 example.org

添加 basic 授權(quán)

http --proxy=http:http://user:pass@10.10.1.10:3128 example.org
環(huán)境變量

也可以通過設(shè)置 HTTP_PROXYHTTPS_PROXY 環(huán)境變量來配置代理,底層的 request
庫也將使用這些代理配置,如果你想指定某些 host 不使用代理,可以通過添加 NO_PROXY 參數(shù)來實(shí)現(xiàn)

在你的 ~/.bash_profile 文件中(zsh 則在 ~/.zshrc 中)

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

要啟用 socks 代理支持請(qǐng)使用 pip 安裝 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 服務(wù)器 SSL 證書驗(yàn)證

使用參數(shù) --verify=no 可以跳過主機(jī) SSL 驗(yàn)證(默認(rèn):yes

http --verify=no https://example.org
自定義 CA 包

使用 --verify= 指定 CA 認(rèn)證包路徑

http --cert=client.pem https://example.org
客戶端 SSL 證書

使用客戶端 SSL 證書進(jìn)行 SSL 通信,可以用 --cert 參數(shù)指定證書文件路徑

http --cert=client.pem https://example.org

如果證書中不包含私鑰,可以通過 --cert-key 參數(shù)指定密鑰文件路徑

http --cert=client.crt --cert-key=client.key https://example.org
SSL 版本

參數(shù) --ssl= 用來指定你想使用的 SSL 協(xié)義版本,默認(rèn)是 `SSL
v2.3`。這將會(huì)協(xié)商服務(wù)端和你安裝的 OpenSSL 支持的最高 SSL
協(xié)議版本。可用的版本有: ssl2.3, ssl3 , tls1 , tls1.1 , tls1.2
(實(shí)際上可用的協(xié)義可能有很多種,這由你安裝的 OpenSSL 決定)

# 指定容易受到攻擊的 SSL v3 協(xié)義與老服務(wù)器進(jìn)行通信
http --ssl=ssl3 https://vulnerable.example.org
服務(wù)器名稱指示 SNI(Server Name Indication)

如果你的 HTTPie 版本(可以使用 http --debug 查看版本)小于 2.7.9,又需要使用
SNI 與服務(wù)器會(huì)話。那么你需要安裝額外的依賴

pip install --upgrade requests[security]

使用下面的命令測試 SNI 支持

http https://sni.velox.ch
輸出參數(shù)

HTTPie 默認(rèn)只輸出最終響應(yīng)信息并且打印(header,
body同樣),你可以通過下面一些參數(shù)控制打印內(nèi)容:

命令行參數(shù) 描述
--headers, -h 僅打印響應(yīng)頭
--body, -b 僅打印響應(yīng)體
--verbose, -v 打印所有的 HTTP 請(qǐng)求來回內(nèi)容,這將默認(rèn)開啟 --all 參數(shù)

使用 --verbose 參數(shù)來調(diào)試請(qǐng)求或生成文檔時(shí)是非常有用的

http --verbose PUT httpbin.org/put hello=world
PUT /put HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Content-Type: application/json
Host: httpbin.org
User-Agent: HTTPie/0.2.7dev

{
    "hello": "world"
}


HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 477
Content-Type: application/json
Date: Sun, 05 Aug 2012 00:25:23 GMT
Server: gunicorn/0.13.4

{
    […]
}
哪部分的 HTTP 請(qǐng)求內(nèi)容應(yīng)該打印出來

所有的 HTTP 輸出選項(xiàng)都屬于更強(qiáng)大的 --print, -p 參數(shù)的快捷方式。--print, -p
接受一個(gè)字符串,字符串的每個(gè)字母都表示下面的 HTTP 某一部分

字符 代表
H 請(qǐng)求頭
B 請(qǐng)求體
h 響應(yīng)頭
b 響應(yīng)體

打印請(qǐng)求頭和響應(yīng)頭:

http --print=Hh PUT httpbin.org/put hello=world
查看中間的請(qǐng)求/響應(yīng)

使用 --all 參數(shù)可以查看 HTTP 通信中的所有信息,中間的 HTTP
通信包括跟隨重定向(使用參數(shù)--follow)和使用 HTTP
摘要授權(quán)時(shí)第一次未授權(quán)的請(qǐng)求(使用參數(shù) --auth=diggest

# 包括最終響應(yīng)之前的所有響應(yīng)信息
http --all --follow httpbin.org/redirect/3

中間請(qǐng)求/響應(yīng)默認(rèn)會(huì)使用 --print, -p 參數(shù)指定的值格式化,可以使用 --history-print, -P 指定,
參數(shù)和 --print, -p 是一樣的。但是這只實(shí)用于 中間請(qǐng)求

# 中間請(qǐng)求/響應(yīng)信息使用 H 格式化,最終請(qǐng)求/響應(yīng)信息使用 Hh 格式化:
http -A digest -a foo:bar --all -p Hh -P H httpbin.org/digest-auth/auth/foo/bar
條件化的 body 內(nèi)容下載

做為一個(gè)優(yōu)化項(xiàng),響應(yīng)體在僅作為輸出一部分時(shí)才會(huì)被下載,這和 HEAD
類型的請(qǐng)求類似(除了 HEAD 可以使用在任何 HTTP 請(qǐng)求中)

比如有一個(gè) API 更新后會(huì)返回整個(gè)資源,但是你只對(duì)更新后響應(yīng)頭中的狀態(tài)碼感興趣:

http --headers PATCH example.org/Really-Huge-Resource name="New Name"

由于我們?cè)谏厦嬖O(shè)置了只打印頭信息,當(dāng)響應(yīng)頭接收完成的時(shí)候服務(wù)器連接就會(huì)被關(guān)閉,
帶寬和時(shí)間不會(huì)浪費(fèi)在下載響應(yīng)體,你可以不必在意。響應(yīng)頭總是會(huì)被下載的無論它是不是輸出部分

重定向輸入

直接從 stdin (標(biāo)準(zhǔn)輸入)管道傳入請(qǐng)求數(shù)據(jù)是大部分人認(rèn)為比較好的方法。
這些數(shù)據(jù)被緩沖而且不需要更多的操作就可以做為請(qǐng)求體被使用,使用管道有下面幾個(gè)好用的方法:

從一個(gè)文件重新定向

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

或者從其它程序的輸出

grep "401 Unauthorized" /var/log/httpd/error_log | http POST example.org/intruders

當(dāng)然也可以使用 echo 命令來傳簡單數(shù)據(jù)

echo "{"name": "John"}" | http PATCH example.com/person/1 X-API-Token:123

甚至可以使用 web services

http GET https://api.github.com/repos/jkbrzt/httpie | http POST httpbin.org/post

也可以使用 cat 命令來輸入多行文本

cat | http POST example.com

^D
cat | http POST example.com/todos Content-Type:text/plain
- buy milk
- call parents
^D

在 macOS 中可以使用 pbpaste 命令把剪貼板中的內(nèi)容做為數(shù)據(jù)發(fā)送

pbpaste | http PUT example.com

通過 stdin 傳遞數(shù)據(jù)的方式 不能 和指定數(shù)據(jù)域的方式混合使用

echo "data" | http POST example.org more=data   # 不可以
從一個(gè)文件中取請(qǐng)求數(shù)據(jù)

指定文件路徑(@/path/to/file)方式可以替代上面使用 stdin 的方式

這個(gè)方法有個(gè)優(yōu)點(diǎn),Content-Type
可以根據(jù)提供的文件擴(kuò)展名自動(dòng)設(shè)置成對(duì)應(yīng)的。比如下面的請(qǐng)求會(huì)被設(shè)置頭 Content-Type: application/xml

http PUT httpbin.org/put @/data/file.xml
命令行輸出

HTTPie 默認(rèn)會(huì)做一些事情,目的是為了讓命令行輸出內(nèi)容有更高的可讀性

顏色和格式化

語法高亮?xí)?yīng)用在 HTTP 請(qǐng)求的 headers 和 body 里面。如果你不喜歡默認(rèn)的配色方案,可以使用
--style 參數(shù)自定義(使用http --help命令查看更多選項(xiàng))

還有下面幾個(gè)格式化規(guī)則會(huì)被使用:

HTTP 頭會(huì)按名稱排序

JSON 數(shù)據(jù)會(huì)有縮進(jìn),并且按 key 名排序,unicode 序列會(huì)被轉(zhuǎn)換成實(shí)際字符

下面這些參數(shù)可以用在處理輸出結(jié)果中:

命令行參數(shù) 描述
--pretty=all 應(yīng)用顏色和格式化,默認(rèn)
--pretty=colors 僅應(yīng)用顏色
--pretty=format 僅應(yīng)用格式化
--pretty=none 不使用顏色和格式化,重定向時(shí)默認(rèn)使用
二進(jìn)制數(shù)據(jù)

二進(jìn)制數(shù)據(jù)在命令行中會(huì)被禁止,這會(huì)使處理響應(yīng)返回的二進(jìn)制數(shù)據(jù)變得更安全,重定向時(shí)也禁止二進(jìn)制數(shù)據(jù),但是會(huì)被裝飾輸出。一旦當(dāng)我們知道響應(yīng)體是二進(jìn)制數(shù)據(jù)時(shí),連接會(huì)關(guān)閉

http example.org/Movie.mov

你幾乎可以立即看見下面的提示:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Encoding: gzip
Content-Type: video/quicktime
Transfer-Encoding: chunked

+-----------------------------------------+
| NOTE: binary data not shown in terminal |
+-----------------------------------------+
重定向輸出

與命令行輸出相比,重定向輸出使用了不同的默認(rèn)值,不同之處在于:

格式化和種顏色默認(rèn)不會(huì)使用(除非--pretty被指定)

只輸出響應(yīng)體(除非指定了輸出參數(shù))

二進(jìn)制結(jié)果不會(huì)被禁止

原因是為了把 HTTPie 的結(jié)果直接 piping
到其它程序,并且使下載文件不需要額外的參數(shù)標(biāo)識(shí)。多數(shù)情況下輸出重定向時(shí)只有響應(yīng)體有意義

下載一個(gè)文件:

http example.org/Movie.mov > Movie.mov

下載 Octocat 圖片,使用 ImageMagick 修改大小,上傳到其它地方:

http octodex.github.com/images/original.jpg | convert - -resize 25% -  | http example.org/Octocats

強(qiáng)制使用格式化與顏色,在 less 的分頁中顯示請(qǐng)求和響應(yīng)

http --pretty=all --verbose example.org | less -R

-R 標(biāo)識(shí)告訴 less 命令解析 HTTPie 輸出中的顏色序列

你可以使用下面的 bash 函數(shù)代碼建立一個(gè)調(diào)用 HTTPie
分頁格式化且高亮輸出的快捷方式:

function httpless {
    # `httpless example.org"
    http --pretty=all --print=hb "$@" | less -R;
}
下載模式

HTTPie 具有下載模式,這和 wget 命令類似

使用 --download, -d 標(biāo)識(shí)啟用,響應(yīng)頭會(huì)打印到命令行,下載響應(yīng)體的進(jìn)度條也會(huì)顯示

http --download https://github.com/jkbrzt/httpie/archive/master.tar.gz
HTTP/1.1 200 OK
Content-Disposition: attachment; filename=httpie-master.tar.gz
Content-Length: 257336
Content-Type: application/x-gzip

Downloading 251.30 kB to "httpie-master.tar.gz"
Done. 251.30 kB in 2.73862s (91.76 kB/s)
下載文件的文件名

如果沒有指定參數(shù) --output, -o,文件名將由 Content-Disposition 決定,或者通過
URL 及其 Content-Type,如果名字已占用,HTTPie 會(huì)添加唯一后綴

下載的同時(shí) piping

即使響應(yīng)頭和進(jìn)度狀態(tài)顯示在命令行中,你仍然可以將響應(yīng)重定向到其它的程序

http -d https://github.com/jkbrzt/httpie/archive/master.tar.gz |  tar zxf -
恢復(fù)下載

如果指定 --output, -o,你可以 --continue, -c
恢復(fù)部分下載。不過僅當(dāng)服務(wù)器支持 Range 請(qǐng)求而且響應(yīng)返回 206 Partial Content
才可以,如果服務(wù)器不支持這個(gè)功能,那就只會(huì)下載整個(gè)文件

http -dco file.zip example.org/file
其它注意事項(xiàng)

--download 僅更改響應(yīng)正文的處理方式

仍然可以使用自定義 header 頭、使用 session 會(huì)話,--verbose, -v

--download 意味著啟用 --follow

如果文件沒有被完全下載完,HTTPie 將會(huì)返回錯(cuò)誤狀態(tài)碼 1 并退出

Accept-Encoding 不能和 --download 一起使用

流式響應(yīng)

響應(yīng)體會(huì)被以塊的形式下載和打印,這使程序在不使用大量內(nèi)存情況下進(jìn)行流式傳輸和下載,然而如果使用顏色和格式化參數(shù),整個(gè) 響應(yīng)體會(huì)被緩沖,然后立即處理

禁用緩沖

可以使用 --stream, -S 進(jìn)行下面的操作:

輸出內(nèi)容以更小的塊更新,不需要任何緩沖,這使得 HTTPie 表現(xiàn)的像 tail -f 命令一樣

即使輸出被美化,流也會(huì)啟用:它將應(yīng)用于響應(yīng)的每一行并立即更新。這樣就可以為持續(xù)時(shí)間長的請(qǐng)求提供一個(gè)漂亮的輸出,例如一個(gè) Twitter 的流 API

示例

修飾過的流響應(yīng)

http --stream -f -a YOUR-TWITTER-NAME https://stream.twitter.com/1/statuses/filter.json track="Justin Bieber"

tail -f 一樣小塊的流輸出

http --stream -f -a YOUR-TWITTER-NAME https://stream.twitter.com/1/statuses/filter.json track=Apple 
| while read tweet; do echo "$tweet" | http POST example.org/tweets ; done
會(huì)話

默認(rèn)情況下,同一個(gè) host 每個(gè) HTTPie 發(fā)出的請(qǐng)求完全獨(dú)立

然而,HTTPie 支持使用 --session=SESSION_NAME_OR_PATH
參數(shù)進(jìn)行持久會(huì)話。在同一個(gè) host 的會(huì)話中,自定義 header(除了以Content-If- 開頭)、authorization、cookies(手動(dòng)指定或者服務(wù)器發(fā)送) 會(huì)持續(xù)保存

# 創(chuàng)建一個(gè)新會(huì)話
http --session=/tmp/session.json example.org API-Token:123

# 復(fù)制用已存在的會(huì)話 API-Token 會(huì)自動(dòng)設(shè)置
http --session=/tmp/session.json example.org

所有的會(huì)話數(shù)據(jù)都會(huì)被存儲(chǔ)成純文本,這表示會(huì)話文件可以使用編輯器手動(dòng)添加或者修改——其實(shí)就是 JSON 數(shù)據(jù)

具名會(huì)話

每個(gè) host 都可以建一個(gè)或者多個(gè)會(huì)話,比如:下面的命令將為 host 是 example.org 的請(qǐng)求建一個(gè)名為 name1 的會(huì)話:

http --session=user1 -a user1:password example.org X-Foo:Bar

從現(xiàn)在起,你就通過名字來選擇會(huì)話,當(dāng)你選擇使用一個(gè)會(huì)話時(shí),之前用過的授權(quán)、HTTP
頭都會(huì)被自動(dòng)添加:

http --session=user1 example.org

創(chuàng)建或者重用不同的會(huì)話,只需要指定不同的名字即可:

http --session=user2 -a user2:password example.org X-Bar:Foo

具名會(huì)話將被以 JSON 的數(shù)據(jù)格式存儲(chǔ)在 ~/.httpie/sessions//.json
下面(windows下則是 %APPDATA%httpiesessions.json

匿名會(huì)話

不同與具名會(huì)話,你也可以直接使用一個(gè)文件路徑來指定會(huì)話文件的存儲(chǔ)地址,這也可以在不同的 host 間復(fù)用會(huì)話:

http --session=/tmp/session.json example.org
http --session=/tmp/session.json admin.example.org
http --session=~/.httpie/sessions/another.example.org/test.json example.org
http --session-read-only=/tmp/session.json example.org
只讀會(huì)話

如果復(fù)用一個(gè)會(huì)話又不想更新會(huì)話信息,可以通過指定 --session-read-only=SESSION_NAME_OR_PATH 來實(shí)現(xiàn)

配置

HTTPie 使用了一個(gè)簡單的 JSON 配置文件

配置文件路徑

默認(rèn)的配置文件路徑在 ~/.httpie/config.json (window 在 %APPDATA%httpieconfig.json),配置文件的路徑也可以通過修改環(huán)境變量 HTTPIE_CONFIG_DIR 來更改,可以使用 http --debug 命令查看當(dāng)前配置文件路徑

可配置的參數(shù)

JSON 配置文件包含以下的鍵:

default_options

參數(shù)默認(rèn)值數(shù)組(默認(rèn)為空),數(shù)組里面的參數(shù)會(huì)被應(yīng)用于每次 HTTPie 的調(diào)用

比如說,你可以使用這個(gè)選項(xiàng)改變默認(rèn)的樣式和輸出參數(shù):"default_options": ["--style=fruity", "--body"] ,另外一個(gè)常用的默認(rèn)參數(shù)是 "--session=default",這會(huì)讓 HTTPie 總是使用會(huì)話(名稱為default)。也可以使用 --form 改變默認(rèn) 不嚴(yán)格的 JSON 類型為 form 類型

__meta__

HTTPie 自動(dòng)存儲(chǔ)了一些它自己的元數(shù)據(jù),不要?jiǎng)铀?/p> 取消之前指定的參數(shù)

配置文件中的參數(shù)和其它任何指定參數(shù)的方法,都可以使用 --no-OPTION
參數(shù)來取消,比如:--no-style 或者 --no-session

腳本

當(dāng)你在 shell 腳本中使用 HTTPie 的時(shí)候,--check-status
標(biāo)識(shí)會(huì)比較好用。這個(gè)標(biāo)識(shí)將告知 HTTPie 如果響應(yīng)狀態(tài)碼是 3xx, 4xx, 5xx
時(shí)程序?qū)⑼顺霾@示對(duì)應(yīng)的錯(cuò)誤碼 3(除非 --follow 參數(shù)被指定), 4, 5

#!/bin/bash

if http --check-status --ignore-stdin --timeout=2.5 HEAD example.org/health &> /dev/null; then
    echo "OK!"
else
    case $? in
        2) echo "Request timed out!" ;;
        3) echo "Unexpected HTTP 3xx Redirection!" ;;
        4) echo "HTTP 4xx Client Error!" ;;
        5) echo "HTTP 5xx Server Error!" ;;
        6) echo "Exceeded --max-redirects= redirects!" ;;
        *) echo "Other Error!" ;;
    esac
fi
最佳實(shí)踐

在非交互式調(diào)用的情況下通常不希望使用 stdin 的默認(rèn)行為,可以使用 --ignore-stdin 參數(shù)來禁止它

如果沒有這個(gè)選項(xiàng),HTTPie 可能會(huì)掛起,這是一個(gè)常見的問題。發(fā)生的場景可能是——例如從定時(shí)任務(wù)中調(diào)用HTTPie時(shí),stdin 未連接到終端。因此,重定向輸入的規(guī)則適用,即 HTTPie 開始讀取它,希望請(qǐng)求體將被傳遞。由于沒有數(shù)據(jù)也沒有 EOF,它會(huì)被卡住。因此,除非你將一些數(shù)據(jù)傳遞給 HTTPie,否則應(yīng)在腳本中使用此標(biāo)志

當(dāng)然使用 --timeout 參數(shù)手動(dòng)設(shè)置(默認(rèn) 30 秒)延遲時(shí)間是個(gè)比較好的做法

元信息 接口設(shè)計(jì)

命令行參數(shù)的設(shè)計(jì)與通過網(wǎng)絡(luò)發(fā)送 HTTP 請(qǐng)求的過程密切相關(guān)。這使得 HTTPie
的命令更容易記憶和閱讀。有時(shí)你甚至可以把原生的 HTTP
請(qǐng)求串連到一行就很自然的形成了 HTTPie 的命令行參數(shù)。例如 對(duì)比下面這個(gè)原生 HTTP
請(qǐng)求:

POST /collection HTTP/1.1
X-API-Key: 123
User-Agent: Bacon/1.0
Content-Type: application/x-www-form-urlencoded

name=value&name2=value2

和使用 HTTPie 命令發(fā)送同樣的參數(shù):

http -f POST example.org/collection 
  X-API-Key:123 
  User-Agent:Bacon/1.0 
  name=value 
  name2=value2

注意他們兩者的順序和參數(shù)都非常相似,并且只有一小部分命令用于控制 HTTPie(-f 表示讓 HTTPie 發(fā)送一個(gè) from 請(qǐng)求),并且不直接對(duì)應(yīng)于請(qǐng)求的任何部分

兩種模式:--pretty=all(命令行中默認(rèn))、--pretty=none(重定向輸出時(shí)默認(rèn)),對(duì)交互式使用和腳本調(diào)用都比較友好,HTTPie 在這過程中作為通用的 HTTP 客戶端

由于 HTTPie 還在頻繁的開發(fā)中,現(xiàn)有的一些命令行參數(shù)在最終版 1.0
發(fā)布之前可能會(huì)有一些微小的調(diào)整。這些調(diào)整都會(huì)在變更日志 里面記錄

用戶支持

你可以通過下面的一些途徑找到幫助支持

GitHub issues

Our Gitter chat room

StackOverflow

Twitter @clihttp,也可以直接 @jkbrzt

相關(guān)項(xiàng)目 依賴

HTTPie 底層使用了兩個(gè)特別棒的庫:

Requests — Python HTTP 庫
Pygments — Python 代碼高亮

HTTPie 的朋友

HTTPie 可以和下面兩個(gè)好友愉快地玩耍:

jq
http-prompt

貢獻(xiàn)

CONTRIBUTING.rst

變更日志

CHANGELOG

插圖

claudiatd/httpie-artwork

許可證

BSD-3-Clause: LICENSE

作者

Jakub Roztocil (@jkbrzt)
創(chuàng)造了 HTTPie,還有一些 優(yōu)秀的人 也貢獻(xiàn)力量

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42367.html

相關(guān)文章

  • ApacheCN 編程/大數(shù)據(jù)/數(shù)據(jù)科學(xué)/人工智能學(xué)習(xí)資源 2019.5

    摘要:請(qǐng)回復(fù)這個(gè)帖子并注明組織個(gè)人信息來申請(qǐng)加入。版筆記等到中文字幕翻譯完畢后再整理。數(shù)量超過個(gè),在所有組織中排名前。網(wǎng)站日超過,排名的峰值為。主頁歸檔社區(qū)自媒體平臺(tái)微博知乎專欄公眾號(hào)博客園簡書合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1...

    zhonghanwen 評(píng)論0 收藏0
  • ApacheCN 編程/大數(shù)據(jù)/數(shù)據(jù)科學(xué)/人工智能學(xué)習(xí)資源 2019.6

    摘要:請(qǐng)回復(fù)這個(gè)帖子并注明組織個(gè)人信息來申請(qǐng)加入。權(quán)限分配靈活,能者居之。數(shù)量超過個(gè),在所有組織中排名前。網(wǎng)站日超過,排名的峰值為。導(dǎo)航歸檔社區(qū)自媒體平臺(tái)微博知乎專欄公眾號(hào)博客園簡書合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...

    Bmob 評(píng)論0 收藏0
  • 別開心太早,Python 官方文檔翻譯差遠(yuǎn)了

    摘要:誠然,宣稱官方中文文檔,確實(shí)不妥,這只是個(gè)人社區(qū)的行為,改正就好了至于合入官方的途徑,只需有翻譯成果,也不難做到最后,一個(gè)站點(diǎn)接些貼片廣告,哪有什么不妥我所了解到的社區(qū)翻譯情況,大致如上。 近幾天,很多公眾號(hào)發(fā)布了 Python 官方文檔的消息。然而,一個(gè)特別奇怪的現(xiàn)象就發(fā)生了,讓人啼笑皆非。 Python 文檔的中文翻譯工作一直是默默無聞,幾個(gè)月前,我還吐槽過這件事《再聊聊Pytho...

    Jason 評(píng)論0 收藏0
  • Laravel不權(quán)威導(dǎo)航

    摘要:版微信第三方登陸包括微信微博等等,查看支持列表擴(kuò)展好用的圖片處理,也方便使用百度版百度版支付集合,包含支付寶等支付寶在的封裝各國語言包,包含簡體中文生成二維碼工具,親測好用未完大家可以向我推薦,直接在本文下留言即可。 Laravel不權(quán)威導(dǎo)航 Hi 這里是Roy整理的Laravel相關(guān)索引,希望能幫到大家showImg(http://static.segmentfault.com/bu...

    focusj 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<