失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > HTTPie 官方文档中文翻译版

HTTPie 官方文档中文翻译版

时间:2021-05-11 21:07:00

相关推荐

HTTPie 官方文档中文翻译版

博客原文»

HTTPie 是一个命令行 HTTP 客户端。目标是让 CLI 与 Web services 的交互尽可能的更友好。它提供了一个简单的http命令,可以让我们用简单自然的表述发送任意 HTTP 请求,并且可以输出带代码高亮的结果。HTTPie 可以使用在测试、调试以及通用的与 HTTP 交互场景

主要功能特性

自然而且简单的命令语句格式化且高亮显示输出内容内置 JSON 支持表单和文件上传支持 HTTPS, 代理和授权验证支持多样化的请求数据格式自定义 headers 头持久 sessions 存储类似wget的下载模式兼容 Python 2.6, 2.7 以及 3.x支持 Linux, macOS 和 Windows 操作系统插件支持详细的文档说明完善的测试用例覆盖

安装

macOS

在 macOS 系统中推荐使用 Homebrew 来安装:

brew install httpie复制代码

当然 MacPorts 也是可以的:

port install httpie复制代码

Linux

大多数的 Linux 构建版都提供了包管理组件,可以使用他们来安装:

# 基于 Debian Linux 的构建版,比如 Ubuntuapt-get install httpie# 基于 RPM Linux 的构建版yum install httpie# Arch Linux 系统pacman -S httpie复制代码

Windows 及其它

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

# 确保使用了最新版本的 pip 和 setuptools:pip install --upgrade pip setuptoolspip install --upgrade httpie复制代码

开发版

最新的开发版本可以直接通过 github 安装

# Homebrewbrew install httpie --HEAD# pippip install --upgrade /jkbrzt/httpie/archive/master.tar.gz复制代码

Python 版本

虽然兼容 Python 2.6, 2.7 版本的,但是如果可以的话还是建议使用最新版的 Python 3.x 来安装 HTTPie。这将保证一些比较新的功能(比如:SNI )可以开箱即用。Python 3 在 Homebrew 0.9.4 版本以上已经成为了默认的 Python 版本。可以使用http --debug来查看 HTTPie 使用的 python 版本

使用

最简单的使用:

http 复制代码

使用语法:

http [flags] [METHOD] URL [ITEM [ITEM]]复制代码

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

例子

自定义 HTTP 方法,HTTP 头和 JSON 数据:

http PUT X-API-Token:123 name=John复制代码

表单提交:

http -f POST hello=World复制代码

使用一个输出参数-v来查看请求信息(默认不显示请求信息):

http -v 复制代码

使用 Github API 向 issue 发送一条评论(需要授权验证参数):

http -a USERNAME POST /repos/jkbrzt/httpie/issues/83/comments body='HTTPie is awesome! :heart:'复制代码

通过命令行的输入重定向上传文件:

http < file.json复制代码

使用wget风格下载文件:

http --download /file复制代码

使用命令会话对同一 host 进行请求之间的持久通信:

http --session=logged-in -a username:password /get API-Key:123http --session=logged-in /headers复制代码

自定义请求 host 头:

http localhost:8000 Host:复制代码

HTTP 方法

HTTP 方法的名称在 URL 参数之前:

http DELETE /todos/7复制代码

这看起来就像是原生的 HTTP 请求发送的文本一样:

DELETE /todos/7 HTTP/1.1复制代码

请求 URL

HTTPie 唯一必传的一个参数是请求 URL,默认的方案不出意料的是http://,可以在请求的时候缺省 -http是没问题的

Querystring 参数

如果需要在命令行手动构建 URLs,你可能会觉得使用param==value添加参数的方式是比较方便的,这样你就不需要担心命令行中转义链接字符串&的问题,当然参数中的特殊字符也将被自动转义(除非已经转义过)。用下面的命令搜索HTTPie logo可以在 google 图片上结果:

http search=='HTTPie logo' tbm==ischGET /?search=HTTPie+logo&tbm=isch HTTP/1.1复制代码

localhost 的 URL 缩写

另外,类似curl的 localhost 缩写也是支持的。这表示你可以使用:3000来代替http://localhost:3000, 如果不传入端口号,80将会默认被使用

http :/fooGET /foo HTTP/1.1Host: localhost复制代码

http :3000/barGET /bar HTTP/1.1Host: localhost:3000复制代码

http :GET / HTTP/1.1Host: localhost复制代码

自定义默认的方案

你可以使用--default-scheme <URL_SCHEME>参数来指定非 HTTP 的其它协义

alias https='http --default-scheme=https'复制代码

请求项

不同的请求项类型提供一种便捷的方法来指定 HTTP 头、简单的 JSON 、表单数据、文件、URL 参数

URL 参数后面紧随的是键/值对参数都会被拼装成请求发送。不同类型的键/值对分割符号分别是::,=,:=,@,=@,:=@。用@分割的参数表示文件路径

数据域不是唯一的指定请求数据的方式,重定向输入也可以

字符转义规则

可以使用\来转义不应该被用于分割符的情况。比如foo\==bar会被转义成一个数据键值对(foo= 和 bar)而不是 URL 参数

通常情况需要使用引号包围值,比如foo='bar baz'

如果有一个域的名字或者 header 以减号开头,你需要把这些参数放在一个特殊符号--后面,这样做是为了和--arguments区分开

http /post -- -name-starting-with-dash=foo -Unusual-Header:barPOST /post HTTP/1.1-Unusual-Header: barContent-Type: application/json{"-name-starting-with-dash": "value"}复制代码

JSON

JSON 是现代 web services 通用规范,HTTPie 也默认遵循了它的不严格的数据类型

http PUT name=John email=john@PUT / HTTP/1.1Accept: application/json, */*Accept-Encoding: gzip, deflateContent-Type: application/jsonHost: {"name": "John","email": "john@"}复制代码

默认行为

如果你的命令包含了一些请求项数据,它们将默认被序列化成 JSON 对象。HTTPie 会默认自动添加下面两个 header 头,当然这两个头也可以重新传入

明确的 JSON

你可以使用命令行参数--json, -j明确地设置Acceptapplication/json而无需在意发送的数据是什么(这是个快捷方式,也可以使用普通的 header 注解:http url Accept:'application/json, */*'),另外,HTTPie 会试着检测 JSON 响应,即使Content-Type是不正常的text/plain或者未知类型

非字符串的 JSON 域

非字符串类型的 JSON 域使用:=分割,这可以允许你嵌入原生纯 JSON 到结果对象,文本和原生的纯 JSNO 文件也可以使用=@:=G嵌入

http PUT /person/1 \name=John \age:=29 married:=false hobbies:='["http", "pies"]' \ # Raw JSONdescription=@about-john.txt \ # Embed text filebookmarks:=@bookmarks.json# Embed JSON filePUT /person/1 HTTP/1.1Accept: application/json, */*Content-Type: application/jsonHost: {"age": 29,"hobbies": ["http","pies"],"description": "John is a nice guy who likes pies.","married": false,"name": "John","bookmarks": {"HTTPie": "",}}复制代码

不过请注意,当发送复杂数据的时候,这个例子使用的语法会显得很笨重。在这种情况下 重定向输入 将会更合适:

http POST /person/1 < person.json复制代码

表单

提交表单和发送 JSON 请求很相似,通常情况下唯一的不同是添加额外的--form, -f参数,这将确保数据域和Content-Type被设置成application/x-www-form-urlencoded; charset=utf-8

普通的表单

http --form POST /person/1 name='John Smith'POST /person/1 HTTP/1.1Content-Type: application/x-www-form-urlencoded; charset=utf-8name=John+Smith复制代码

文件上传表单

如果有一个文件域,序列化方式和 content type 会是multipart/form-data

http -f POST /jobs name='John Smith' cv@~/Documents/cv.pdf复制代码

上面的请求和下面的 HTML 表单发送请求是一样的:

<form enctype="multipart/form-data" method="post" action="/jobs"><input type="text" name="name" /><input type="file" name="cv" /></form>复制代码

注意@用来模拟文件上传域,而=@是把文件内容以文本的方式嵌入到数据域的值里面

HTTP 头

可以使用Header:Value注解的形式来添加自定义头信息

http User-Agent:Bacon/1.0 'Cookie:valued-visitor=yes;foo=bar' \X-Foo:Bar Referer:/GET / HTTP/1.1Accept: */*Accept-Encoding: gzip, deflateCookie: valued-visitor=yes;foo=barHost: Referer: /User-Agent: Bacon/1.0X-Foo: Bar复制代码

默认的请求头

有几个默认的请求头是 HTTPie 设置的

GET / HTTP/1.1Accept: */*Accept-Encoding: gzip, deflateUser-Agent: HTTPie/<version>Host: <taken-from-URL>复制代码

空头和重新设置默认头

可以使用Header:来取消上面的几个默认头信息

http /headers Accept: User-Agent:复制代码

请求中的AcceptUser-Agent头都会被移除

使用Header;表示添加一个为空的头信息,注意须使用引号

http -v /headers 'Host;'GET /headers HTTP/1.1Accept: */*Accept-Encoding: gzip, deflateConnection: keep-aliveHost:User-Agent: HTTPie/0.9.9...复制代码

授权验证

目前支持的验证方案有基础和摘要两种(查看更多 授权插件),有两种标识来控制验证:

Basic 授权

http -a username:password 复制代码

Digest 授权

http -A digest -a username:password 复制代码

密码提示

http -a username <Paste>复制代码

.netrc

从你的~/.netrc文件授权也可以

cat ~/.netrcmachine login httpiepassword testhttp /basic-auth/httpie/testHTTP/1.1 200 OK[...]复制代码

授权插件

授权机制可以使用安装插件的方式来实现,可以在 Python Package 上面找到更多相关插件

httpie-api-auth: ApiAuthhttpie-aws-auth: AWS / Amazon S3httpie-edgegrid: EdgeGridhttpie-hmac-auth: HMAChttpie-jwt-auth: JWTAuth (JSON Web Tokens)httpie-negotiate: SPNEGO (GSS Negotiate)httpie-ntlm: NTLM (NT LAN Manager)httpie-oauth: OAuthrequests-hawk: Hawk

HTTP 重定向

HTTP 重定向默认不会自动跳转,请求发出后命令行只会显示第一次收到的响应

http /redirect/3复制代码

按 header 头中的 location 字段值跳转

指定--follow, -F参数让 HTTPie 自动跟随30x响应头中的location字段值进行跳转,并且显示最终的响应内容

http --follow /redirect/3复制代码

显示中间的跳转响应

如果你也想看到更多的跳转信息,可以指定--all参数

http --follow --all /redirect/3复制代码

限制重定向最大次数

改变默认最大30次重定向值可以使用--max-redirects=<limit>参数

http --follow --all --max-redirects=5 /redirect/3复制代码

代理

你可以通过添加参数--proxy来指定各自协义(为了防止跨协义的重定向,协义被包含在了参数值中)的代理服务器

http --proxy=http:http://10.10.1.10:3128 --proxy=https:https://10.10.1.10:1080 复制代码

添加 basic 授权

http --proxy=http:http://user:pass@10.10.1.10:3128 复制代码

环境变量

也可以通过设置HTTP_PROXYHTTPS_PROXY环境变量来配置代理,底层的 request 库也将使用这些代理配置,如果你想指定某些 host 不使用代理,可以通过添加NO_PROXY参数来实现

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

export HTTP_PROXY=http://10.10.1.10:3128export HTTPS_PROXY=https://10.10.1.10:1080export NO_PROXY=localhost,复制代码

Socks

要启用 socks 代理支持请使用 pip 安装requests[socks]

pip install -U requests[socks]复制代码

用法与其它类型的代理相同:

http --proxy=http:socks5://user:pass@host:port --proxy=https:socks5://user:pass@host:port 复制代码

HTTPS

服务器 SSL 证书验证

使用参数--verify=no可以跳过主机 SSL 验证(默认:yes

http --verify=no 复制代码

自定义 CA 包

使用--verify=<CA_BUNDLE_PATH>指定 CA 认证包路径

http --cert=client.pem 复制代码

客户端 SSL 证书

使用客户端 SSL 证书进行 SSL 通信,可以用--cert参数指定证书文件路径

http --cert=client.pem 复制代码

如果证书中不包含私钥,可以通过--cert-key参数指定密钥文件路径

http --cert=client.crt --cert-key=client.key 复制代码

SSL 版本

参数--ssl=<PROTOCOL>用来指定你想使用的 SSL 协义版本,默认是SSL v2.3。这将会协商服务端和你安装的 OpenSSL 支持的最高 SSL 协议版本。可用的版本有:ssl2.3,ssl3,tls1,tls1.1,tls1.2(实际上可用的协义可能有很多种,这由你安装的 OpenSSL 决定)

# 指定容易受到攻击的 SSL v3 协义与老服务器进行通信http --ssl=ssl3 复制代码

服务器名称指示 SNI(Server Name Indication)

如果你的 HTTPie 版本(可以使用http --debug查看版本)小于 2.7.9,又需要使用 SNI 与服务器会话。那么你需要安装额外的依赖

pip install --upgrade requests[security]复制代码

使用下面的命令测试 SNI 支持

http https://sni.velox.ch复制代码

输出参数

HTTPie 默认只输出最终响应信息并且打印(header, body同样),你可以通过下面一些参数控制打印内容:

使用--verbose参数来调试请求或生成文档时是非常有用的

http --verbose PUT /put hello=worldPUT /put HTTP/1.1Accept: application/json, */*Accept-Encoding: gzip, deflateContent-Type: application/jsonHost: User-Agent: HTTPie/0.2.7dev{"hello": "world"}HTTP/1.1 200 OKConnection: keep-aliveContent-Length: 477Content-Type: application/jsonDate: Sun, 05 Aug 00:25:23 GMTServer: gunicorn/0.13.4{[…]}复制代码

哪部分的 HTTP 请求内容应该打印出来

所有的 HTTP 输出选项都属于更强大的--print, -p参数的快捷方式。--print, -p接受一个字符串,字符串的每个字母都表示下面的 HTTP 某一部分

打印请求头和响应头:

http --print=Hh PUT /put hello=world复制代码

查看中间的请求/响应

使用--all参数可以查看 HTTP 通信中的所有信息,中间的 HTTP 通信包括跟随重定向(使用参数--follow)和使用 HTTP 摘要授权时第一次未授权的请求(使用参数--auth=diggest

# 包括最终响应之前的所有响应信息http --all --follow /redirect/3复制代码

中间请求/响应默认会使用--print, -p参数指定的值格式化,可以使用--history-print, -P指定, 参数和--print, -p是一样的。但是这只实用于中间请求

# 中间请求/响应信息使用 H 格式化,最终请求/响应信息使用 Hh 格式化:http -A digest -a foo:bar --all -p Hh -P H /digest-auth/auth/foo/bar复制代码

条件化的 body 内容下载

做为一个优化项,响应体在仅作为输出一部分时才会被下载,这和HEAD类型的请求类似(除了 HEAD 可以使用在任何 HTTP 请求中)

比如有一个 API 更新后会返回整个资源,但是你只对更新后响应头中的状态码感兴趣:

http --headers PATCH /Really-Huge-Resource name='New Name'复制代码

由于我们在上面设置了只打印头信息,当响应头接收完成的时候服务器连接就会被关闭, 带宽和时间不会浪费在下载响应体,你可以不必在意。响应头总是会被下载的无论它是不是输出部分

重定向输入

直接从stdin(标准输入)管道传入请求数据是大部分人认为比较好的方法。 这些数据被缓冲而且不需要更多的操作就可以做为请求体被使用,使用管道有下面几个好用的方法:

从一个文件重新定向

http PUT /person/1 X-API-Token:123 < person.json复制代码

或者从其它程序的输出

grep '401 Unauthorized' /var/log/httpd/error_log | http POST /intruders复制代码

当然也可以使用echo命令来传简单数据

echo '{"name": "John"}' | http PATCH /person/1 X-API-Token:123复制代码

甚至可以使用 web services

http GET /repos/jkbrzt/httpie | http POST /post复制代码

也可以使用cat命令来输入多行文本

cat | http POST <paste>^D复制代码

cat | http POST /todos Content-Type:text/plain- buy milk- call parents^D复制代码

在 macOS 中可以使用pbpaste命令把剪贴板中的内容做为数据发送

pbpaste | http PUT 复制代码

通过stdin传递数据的方式不能和指定数据域的方式混合使用

echo 'data' | http POST more=data # 不可以复制代码

从一个文件中取请求数据

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

这个方法有个优点,Content-Type可以根据提供的文件扩展名自动设置成对应的。比如下面的请求会被设置头Content-Type: application/xml

http PUT /put @/data/file.xml复制代码

命令行输出

HTTPie 默认会做一些事情,目的是为了让命令行输出内容有更高的可读性

颜色和格式化

语法高亮会应用在 HTTP 请求的 headers 和 body 里面。如果你不喜欢默认的配色方案,可以使用--style参数自定义(使用http --help命令查看更多选项)

还有下面几个格式化规则会被使用:

HTTP 头会按名称排序JSON 数据会有缩进,并且按 key 名排序,unicode 序列会被转换成实际字符

下面这些参数可以用在处理输出结果中:

二进制数据

二进制数据在命令行中会被禁止,这会使处理响应返回的二进制数据变得更安全,重定向时也禁止二进制数据,但是会被装饰输出。一旦当我们知道响应体是二进制数据时,连接会关闭

http /Movie.mov复制代码

你几乎可以立即看见下面的提示:

HTTP/1.1 200 OKAccept-Ranges: bytesContent-Encoding: gzipContent-Type: video/quicktimeTransfer-Encoding: chunked+-----------------------------------------+| NOTE: binary data not shown in terminal |+-----------------------------------------+复制代码

重定向输出

与命令行输出相比,重定向输出使用了不同的默认值,不同之处在于:

格式化和种颜色默认不会使用(除非--pretty被指定)只输出响应体(除非指定了输出参数)二进制结果不会被禁止

原因是为了把 HTTPie 的结果直接 piping 到其它程序,并且使下载文件不需要额外的参数标识。多数情况下输出重定向时只有响应体有意义

下载一个文件:

http /Movie.mov > Movie.mov复制代码

下载 Octocat 图片,使用 ImageMagick 修改大小,上传到其它地方:

http /images/original.jpg | convert - -resize 25% - | http /Octocats复制代码

强制使用格式化与颜色,在less的分页中显示请求和响应

http --pretty=all --verbose | less -R复制代码

-R标识告诉less命令解析 HTTPie 输出中的颜色序列

你可以使用下面的 bash 函数代码建立一个调用 HTTPie 分页格式化且高亮输出的快捷方式:

function httpless {# `httpless 'http --pretty=all --print=hb "$@" | less -R;}复制代码

下载模式

HTTPie 具有下载模式,这和wget命令类似

使用--download, -d标识启用,响应头会打印到命令行,下载响应体的进度条也会显示

http --download /jkbrzt/httpie/archive/master.tar.gzHTTP/1.1 200 OKContent-Disposition: attachment; filename=httpie-master.tar.gzContent-Length: 257336Content-Type: application/x-gzipDownloading 251.30 kB to "httpie-master.tar.gz"Done. 251.30 kB in 2.73862s (91.76 kB/s)复制代码

下载文件的文件名

如果没有指定参数--output, -o,文件名将由Content-Disposition决定,或者通过 URL 及其Content-Type,如果名字已占用,HTTPie 会添加唯一后缀

下载的同时 piping

即使响应头和进度状态显示在命令行中,你仍然可以将响应重定向到其它的程序

http -d /jkbrzt/httpie/archive/master.tar.gz | tar zxf -复制代码

恢复下载

如果指定--output, -o,你可以--continue, -c恢复部分下载。不过仅当服务器支持Range请求而且响应返回206 Partial Content才可以,如果服务器不支持这个功能,那就只会下载整个文件

http -dco file.zip /file复制代码

其它注意事项

--download仅更改响应正文的处理方式仍然可以使用自定义 header 头、使用 session 会话,--verbose, -v--download意味着启用--follow如果文件没有被完全下载完,HTTPie 将会返回错误状态码1并退出Accept-Encoding不能和--download一起使用

流式响应

响应体会被以块的形式下载和打印,这使程序在不使用大量内存情况下进行流式传输和下载,然而如果使用颜色和格式化参数,整个响应体会被缓冲,然后立即处理

禁用缓冲

可以使用--stream, -S进行下面的操作:

输出内容以更小的块更新,不需要任何缓冲,这使得 HTTPie 表现的像tail -f命令一样即使输出被美化,流也会启用:它将应用于响应的每一行并立即更新。这样就可以为持续时间长的请求提供一个漂亮的输出,例如一个 Twitter 的流 API

示例

修饰过的流响应

http --stream -f -a YOUR-TWITTER-NAME /1/statuses/filter.json track='Justin Bieber'复制代码

tail -f一样小块的流输出

http --stream -f -a YOUR-TWITTER-NAME /1/statuses/filter.json track=Apple \| while read tweet; do echo "$tweet" | http POST /tweets ; done复制代码

会话

默认情况下,同一个 host 每个 HTTPie 发出的请求完全独立

然而,HTTPie 支持使用--session=SESSION_NAME_OR_PATH参数进行持久会话。在同一个 host 的会话中,自定义 header(除了以Content-If-开头)、authorization、cookies(手动指定或者服务器发送) 会持续保存

# 创建一个新会话http --session=/tmp/session.json API-Token:123# 复制用已存在的会话 API-Token 会自动设置http --session=/tmp/session.json 复制代码

所有的会话数据都会被存储成纯文本,这表示会话文件可以使用编辑器手动添加或者修改——其实就是 JSON 数据

具名会话

每个 host 都可以建一个或者多个会话,比如:下面的命令将为 host 是的请求建一个名为name1的会话:

http --session=user1 -a user1:password X-Foo:Bar复制代码

从现在起,你就通过名字来选择会话,当你选择使用一个会话时,之前用过的授权、HTTP 头都会被自动添加:

http --session=user1 复制代码

创建或者重用不同的会话,只需要指定不同的名字即可:

http --session=user2 -a user2:password X-Bar:Foo复制代码

具名会话将被以 JSON 的数据格式存储在~/.httpie/sessions/<host>/<name>.json下面(windows下则是%APPDATA%\httpie\sessions\<host>\<name>.json

匿名会话

不同与具名会话,你也可以直接使用一个文件路径来指定会话文件的存储地址,这也可以在不同的 host 间复用会话:

http --session=/tmp/session.json http --session=/tmp/session.json http --session=~/.httpie/sessions//test.json http --session-read-only=/tmp/session.json 复制代码

只读会话

如果复用一个会话又不想更新会话信息,可以通过指定--session-read-only=SESSION_NAME_OR_PATH来实现

配置

HTTPie 使用了一个简单的 JSON 配置文件

配置文件路径

默认的配置文件路径在~/.httpie/config.json(window 在%APPDATA%\httpie\config.json),配置文件的路径也可以通过修改环境变量HTTPIE_CONFIG_DIR来更改,可以使用http --debug命令查看当前配置文件路径

可配置的参数

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

default_options

参数默认值数组(默认为空),数组里面的参数会被应用于每次 HTTPie 的调用

比如说,你可以使用这个选项改变默认的样式和输出参数:"default_options": ["--style=fruity", "--body"],另外一个常用的默认参数是"--session=default",这会让 HTTPie 总是使用会话(名称为default)。也可以使用--form改变默认不严格的JSON 类型为 form 类型

__meta__

HTTPie 自动存储了一些它自己的元数据,不要动它

取消之前指定的参数

配置文件中的参数和其它任何指定参数的方法,都可以使用--no-OPTION参数来取消,比如:--no-style或者--no-session

脚本

当你在 shell 脚本中使用 HTTPie 的时候,--check-status标识会比较好用。这个标识将告知 HTTPie 如果响应状态码是3xx,4xx,5xx时程序将退出并显示对应的错误码3(除非--follow参数被指定),4,5

#!/bin/bashif http --check-status --ignore-stdin --timeout=2.5 HEAD /health &> /dev/null; thenecho 'OK!'elsecase $? in2) 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=<n> redirects!' ;;*) echo 'Other Error!' ;;esacfi复制代码

最佳实践

在非交互式调用的情况下通常不希望使用stdin的默认行为,可以使用--ignore-stdin参数来禁止它

如果没有这个选项,HTTPie 可能会挂起,这是一个常见的问题。发生的场景可能是——例如从定时任务中调用HTTPie时,stdin未连接到终端。因此,重定向输入的规则适用,即 HTTPie 开始读取它,希望请求体将被传递。由于没有数据也没有 EOF,它会被卡住。因此,除非你将一些数据传递给 HTTPie,否则应在脚本中使用此标志

当然使用--timeout参数手动设置(默认 30 秒)延迟时间是个比较好的做法

元信息

接口设计

命令行参数的设计与通过网络发送 HTTP 请求的过程密切相关。这使得 HTTPie 的命令更容易记忆和阅读。有时你甚至可以把原生的 HTTP 请求串连到一行就很自然的形成了 HTTPie 的命令行参数。例如 对比下面这个原生 HTTP 请求:

POST /collection HTTP/1.1X-API-Key: 123User-Agent: Bacon/1.0Content-Type: application/x-www-form-urlencodedname=value&name2=value2复制代码

和使用 HTTPie 命令发送同样的参数:

http -f POST /collection \X-API-Key:123 \User-Agent:Bacon/1.0 \name=value \name2=value2复制代码

注意他们两者的顺序和参数都非常相似,并且只有一小部分命令用于控制 HTTPie(-f表示让 HTTPie 发送一个 from 请求),并且不直接对应于请求的任何部分

两种模式:--pretty=all(命令行中默认)、--pretty=none(重定向输出时默认),对交互式使用和脚本调用都比较友好,HTTPie 在这过程中作为通用的 HTTP 客户端

由于 HTTPie 还在频繁的开发中,现有的一些命令行参数在最终版1.0发布之前可能会有一些微小的调整。这些调整都会在变更日志 里面记录

用户支持

你可以通过下面的一些途径找到帮助支持

GitHub issuesOur Gitter chat roomStackOverflowTwitter @clihttp,也可以直接 @jkbrzt

相关项目

依赖

HTTPie 底层使用了两个特别棒的库:

Requests — Python HTTP 库 Pygments — Python 代码高亮

HTTPie 的朋友

HTTPie 可以和下面两个好友愉快地玩耍:

jq http-prompt

贡献

CONTRIBUTING.rst

变更日志

CHANGELOG

插图

claudiatd/httpie-artwork

许可证

BSD-3-Clause: LICENSE

作者

Jakub Roztocil (@jkbrzt) 创造了 HTTPie,还有一些 优秀的人 也贡献力量

如果觉得《HTTPie 官方文档中文翻译版》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。