Just another site

Thought this was cool: jkbr/httpie · GitHub

leave a comment »

Comments: “jkbr/httpie · GitHub”


HTTPie: cURL for humans

☞ README for stable version

HTTPie is a CLI HTTP utility built out of frustration with existing tools.
The goal is to make CLI interaction with HTTP-based services as
human-friendly as possible.

HTTPie does so by providing an http command that allows for issuing
arbitrary HTTP requests using a simple and natural syntax and displaying
colorized responses:

Under the hood, HTTPie uses the excellent
Requests and
Pygments Python libraries. Python 2.6+ is supported
(including 3.x).


The latest stable version of HTTPie can always be installed
(or updated to) via

pip install -U httpie

Or, you can install the development version directly from GitHub:

pip install -U

There are packages available for
Ubuntu and


Hello world:



http [flags] [METHOD] URL [items]

There are five types of key-value pair items available:

Headers (Name:Value)
Arbitrary HTTP headers. The : character is used to separate a header’s
name from its value, e.g., X-API-Token:123.
Simple data fields (field=value)
Data items are included in the request body. Depending on the
Content-Type, they are automatically serialized as a JSON Object
(default) or application/x-www-form-urlencoded (the -f flag).
Data items use = as the separator, e.g., hello=world.
Raw JSON fields (field:=value)
This item type is needed when Content-Type is JSON and a field’s value
is a Boolean, Number, nested Object or an Array, because
simple data items are always serialized as String.
E.g. pies:=[1,2,3].
File fields (field@/path/to/file)
Only available with -f / –form. Use @ as the separator, e.g.,
screenshot@/path/to/file.png. The presence of a file field results into
a multipart/form-data request.
Query String Parameters (name=:value)
Appends the given name/value pair as a query string to the URL.


http PATCH X-API-Token:123 name=John age:=29

The following request is issued:

PATCH /person/1 HTTP/1.1
User-Agent: HTTPie/0.1
X-API-Token: 123
Content-Type: application/json; charset=utf-8
{"name": "John", "email": "", "age": 29}

It can easily be changed to a form request using the -f
(or –form) flag, which produces:

PATCH /person/1 HTTP/1.1
User-Agent: HTTPie/0.1
X-API-Token: 123
Content-Type: application/x-www-form-urlencoded; charset=utf-8

It is also possible to send multipart/form-data requests, i.e., to
simulate a file upload form submission. It is done using the
–form / -f flag and passing one or more file fields:

http -f POST name=John cv@~/Documents/cv.pdf

The above will send the same request as if the following HTML form were submitted:

<form enctype="multipart/form-data" method="post" action="">
 <input type="text" name="name" />
 <input type="file" name="cv" />

Query string parameters can be added to any request:

http GET search=:donuts

Will GET the URL “”.

A whole request body can be passed in via “stdin“ instead, in which
case it will be used with no further processing:

echo '{"name": "John"}' | http PATCH X-API-Token:123
# Or:
http POST X-API-Token:123 < person.json

That can be used for piping services together. The following example
GET-s JSON data from the Github API and POST-s it to

http -b GET | http POST

The above can be further simplified by omitting GET and POST because
they are both default here. The first command has no request data, whereas
the second one does via stdin:

http -b | http

An alternative to stdin is to pass a file name whose content will be used
as the request body. It has the advantage that the Content-Type header
will automatically be set to the appropriate value based on the filename
extension (using the mimetypes module). Therefore, the following will
request will send the verbatim contents of the file with
Content-Type: application/xml:

http PUT @/data/file.xml


Most of the flags mirror the arguments understood by requests.request.
See http -h for more details:

$ http --help
usage: http [-h] [--version] [--json | --form] [--traceback]
 [--pretty | --ugly]
 [--print OUTPUT_OPTIONS | --verbose | --headers | --body]
 [--style STYLE] [--auth AUTH] [--auth-type {basic,digest}]
 [--verify VERIFY] [--proxy PROXY] [--allow-redirects]
 [--timeout TIMEOUT]
HTTPie - cURL for humans. <>
positional arguments:
 METHOD The HTTP method to be used for the request (GET, POST,
 PUT, DELETE, PATCH, ...). If this argument is omitted,
 then HTTPie will guess the HTTP method. If there is
 some data to be sent, then it will be POST, otherwise
 URL The protocol defaults to http:// if the URL does not
 include one.
 ITEM A key-value pair whose type is defined by the
 separator used. It can be an HTTP header
 (header:value), a query parameter (name=:value),
 a data field to be used in the request body
 (field_name=value), a raw JSON data field
 (field_name:=value), or a file field
 (field_name@/path/to/file). You can use a backslash to
 escape a colliding separator in the field name.
optional arguments:
 -h, --help show this help message and exit
 --version show program's version number and exit
 --json, -j (default) Data items from the command line are
 serialized as a JSON object. The Content-Type and
 Accept headers are set to application/json (if not
 --form, -f Data items from the command line are serialized as
 form fields. The Content-Type is set to application/x
 -www-form-urlencoded (if not specified). The presence
 of any file fields results into a multipart/form-data
 --traceback Print exception traceback should one occur.
 --pretty If stdout is a terminal, the response is prettified by
 default (colorized and indented if it is JSON). This
 flag ensures prettifying even when stdout is
 --ugly, -u Do not prettify the response.
 String specifying what should the output contain. "H"
 stands for the request headers and "B" for the request
 body. "h" stands for the response headers and "b" for
 response the body. Defaults to "hb" which means that
 the whole response (headers and body) is printed.
 --verbose, -v Print the whole request as well as the response.
 Shortcut for --print=HBhb.
 --headers, -t Print only the response headers. Shortcut for
 --body, -b Print only the response body. Shortcut for --print=b.
 --style STYLE, -s STYLE
 Output coloring style, one of autumn, borland, bw,
 colorful, default, emacs, friendly, fruity, manni,
 monokai, murphy, native, pastie, perldoc, rrt,
 solarized, tango, trac, vim, vs. Defaults to
 solarized. For this option to work properly, please
 make sure that the $TERM environment variable is set
 to "xterm-256color" or similar (e.g., via `export TERM
 =xterm-256color' in your ~/.bashrc).
 --auth AUTH, -a AUTH username:password. If the password is omitted (-a
 username), HTTPie will prompt for it.
 --auth-type {basic,digest}
 The authentication mechanism to be used. Defaults to
 --verify VERIFY Set to "no" to skip checking the host's SSL
 certificate. You can also pass the path to a CA_BUNDLE
 file for private certs. You can also set the
 REQUESTS_CA_BUNDLE environment variable. Defaults to
 --proxy PROXY String mapping protocol to the URL of the proxy (e.g.
 --allow-redirects Set this flag if full redirects are allowed (e.g. re-
 POST-ing of data at new ``Location``)
 --timeout TIMEOUT Float describes the timeout of the request (Use
 socket.setdefaulttimeout() as fallback).


View contributors on GitHub.

If you have found a bug or have a feature request, the
issue tracker is the
place to start a discussion about it.

To contribute code or documentation, please first browse the existing issues
to see if the feature/bug has previously been discussed. Then fork
the repository, make changes in your
develop branch and submit a pull request. Note: Pull requests with tests and
documentation are 53.6% more awesome 🙂

Before a pull requests is submitted, it’s a good idea to run the existing
suite of tests:

python test

Tox can used to conveniently run tests in all of
supported Python environments:

# Install tox
pip install tox
# Run tests


  • 0.2.6dev
    Added query string parameters (param=:value).
    Added support for terminal colors under Windows.
  • 0.2.5 (2012-07-17)
    Unicode characters in prettified JSON now don’t get escaped for
    improved readability.
    –auth now prompts for a password if only a username provided.
    Added support for request payloads from a file path with automatic
    Content-Type (http URL @/path).
    Fixed missing query string when displaing the request headers via
    Fixed Content-Type for requests with no data.
  • 0.2.2 (2012-06-24)
    The METHOD positional argument can now be omitted (defaults to
    GET, or to POST with data).
    Fixed –verbose –form.
    Added support for Tox.
  • 0.2.1 (2012-06-13)
    Added compatibility with requests-0.12.1.
    Dropped custom JSON and HTTP lexers in favor of the ones newly included
    in pygments-1.5.
  • 0.2.0 (2012-04-25)
    Added Python 3 support.
    Added the ability to print the HTTP request as well as the response
    (see –print and –verbose).
    Added support for Digest authentication.
    Added file upload support
    (http -f POST file_field_name@/path/to/file).
    Improved syntax highlighting for JSON.
    Added support for field name escaping.
    Many bug fixes.
  • 0.1.6 (2012-03-04)

from Hacker News 200:


Written by cwyalpha

七月 22, 2012 在 3:38 下午

发表在 Uncategorized


Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: