HTTPie执行请求,惟一须要指定的信息是URL。默认的scheme,不出意外的,http://,是能够忽略的,http example.org 也是能够的。html
此外,像curl同样的速记方式也是支持的。好比:3000也就是http://localhost:3000 若是忽略了端口,默认使用80python
$ 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
若是须要在终端手动用查询字符串参数,能够用param=value的语法拼接URL参数,而没必要担忧会丢失&分隔符。并且,参数里的特殊字符也会自动去除。web
能够用 --default-scheme <URL_SCHEME>选项来建立其余协议的快捷方式json
$ alias https='http --default-scheme=https'
有几种不一样的request类型能够方便的指定HTTP头,JSON格式的数据,FORM数据,文件以及URL参数。在URL后面指定键值对。api
这些请求项都有共同的特色,是实际请求的一部分,它们仅仅以分隔符区分,:
, =
, :=
, ==
, @
, =@
, and :=@,
有@符号的是指定一个文件的路径bash
Item Type | Description |
---|---|
HTTP Headersapp
|
任意 HTTP header, e.g. X-API-Token:123 . |
URL parameterspost
|
添加键值对做为URL的查询字符串参数 The |
Data Fields
|
请求数据字段默认做为JSON对象传递, 或者做为form-encoded ( |
Raw JSON fields
|
有时传递JSON,有些字段类型是 e.g., |
Form File Fields
|
仅仅刚使用 For example |
You can use \
to escape characters that shouldn't be used as separators (or parts thereof). For instance,foo\==bar
will become a data key/value pair (foo=
and bar
) instead of a URL parameter.
有时须要用到引号把值引发来 e.g. foo='bar baz'
.
若是字段名是以减号开始的‘-’(e.g., -fieldname
), 须要把它们放在 -- 后面以免冲突
--arguments
:
$ http httpbin.org/post -- -name-starting-with-dash=foo --Weird-Header:bar
POST /post HTTP/1.1 --Weird-Header: bar { "-name-starting-with-dash": "value" }
注意数据字段并非传递request data的惟一方式,Redirected input也能够传递惟一的数据
JSON是现代web服务的通用语言,也是HTTPie默认使用的隐含类型:
若是命令行中包含数据项,它们默认序列化为JSON格式。HTTPie会自动设置下列头,它们也都是能够重写的:
Content-Type | application/json |
Accept | application/json, */* |
也能够用--json, -j显式的把Accept设置成application/json,无论是否须要传递数据(有一种快捷方式设置头,经过经常使用的头标识符 http url Accept:'application/json, */*')
此外,HTTPie会检测JSON响应,即便Content-Type并不正确(好比text/plain)或者没有设置。
例子:
$ 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" }
非string的字段要用:=分隔符,能够把纯JSON插入对象里。Text和纯JSON文件能够分别用=@和:=@标识符插入:
$ 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", } }
用文件形式传递JSON数据用以下形式:
$ http POST api.example.com/person/1 < person.json
$ 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
提供的一个以上的字段的话,序列化的content type就是multipart/form-data
$ http -f POST example.com/jobs name='John Smith' cv@~/Documents/cv.pdf
上述请求和以下HTML表单提交的状况同样:
<form enctype="multipart/form-data" method="post" action="http://example.com/jobs"> <input type="text" name="name" /> <input type="file" name="cv" /> </form>
注意@符号用于模拟文件上传的表单字段,而=@符号只是把文件内容做为text插入
若是要设置自定义的头能够用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
HTTPie默认设置了须要头信息
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: HTTPie/<version>
Host: <taken-from-URL>
默认的头能够重写也能够清除掉,清除已指定的头(好比一个默认的头),用Header:
$ http httpbin.org/headers Accept: User-Agent:
若是要传空值的头,用Header;
$ http httpbin.org/headers 'Header;'