2012-03-05 02:48:06 +03:00
|
|
|
HTTPie: cURL for humans
|
|
|
|
=======================
|
2012-02-25 15:39:38 +03:00
|
|
|
|
2012-07-19 13:31:02 +03:00
|
|
|
`☞ README for stable version <https://github.com/jkbr/httpie/tree/0.2.5#readme>`_
|
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
**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.
|
2012-03-04 13:54:27 +03:00
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
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**:
|
2012-03-04 13:54:27 +03:00
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
.. image:: https://github.com/jkbr/httpie/raw/master/httpie.png
|
|
|
|
:alt: HTTPie compared to cURL
|
2012-02-25 15:39:38 +03:00
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
Under the hood, HTTPie uses the excellent
|
|
|
|
`Requests <http://python-requests.org>`_ and
|
|
|
|
`Pygments <http://pygments.org/>`_ Python libraries. Python 2.6+ is supported
|
|
|
|
(including 3.x).
|
2012-02-25 16:42:06 +03:00
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
Installation
|
|
|
|
------------
|
2012-02-25 15:39:38 +03:00
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
The latest **stable version** of HTTPie can always be installed
|
|
|
|
(or updated to) via
|
|
|
|
`pip <http://www.pip-installer.org/en/latest/index.html>`_::
|
2012-03-04 04:26:41 +03:00
|
|
|
|
|
|
|
pip install -U httpie
|
|
|
|
|
2012-07-20 23:09:53 +03:00
|
|
|
You can also use `easy_install` (``pip`` is prefered, though)::
|
|
|
|
|
|
|
|
easy_install httpie
|
2012-03-05 02:48:06 +03:00
|
|
|
|
|
|
|
Or, you can install the **development version** directly from GitHub:
|
|
|
|
|
|
|
|
.. image:: https://secure.travis-ci.org/jkbr/httpie.png
|
|
|
|
:target: http://travis-ci.org/jkbr/httpie
|
|
|
|
:alt: Build Status of the master branch
|
|
|
|
|
|
|
|
::
|
2012-03-04 04:26:41 +03:00
|
|
|
|
|
|
|
pip install -U https://github.com/jkbr/httpie/tarball/master
|
2012-02-25 15:39:38 +03:00
|
|
|
|
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
There are packages available for
|
2012-07-20 23:09:53 +03:00
|
|
|
`Ubuntu <http://packages.ubuntu.com/httpie>`_,
|
|
|
|
`Debian <http://packages.debian.org/httpie>`_ and
|
|
|
|
other possibly other major distros as well.
|
2012-07-11 16:32:00 +03:00
|
|
|
|
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
Usage
|
|
|
|
-----
|
|
|
|
|
|
|
|
Hello world::
|
|
|
|
|
2012-06-17 20:46:56 +03:00
|
|
|
http httpie.org
|
2012-03-05 02:48:06 +03:00
|
|
|
|
|
|
|
Synopsis::
|
|
|
|
|
2012-06-17 20:46:56 +03:00
|
|
|
http [flags] [METHOD] URL [items]
|
2012-02-25 15:39:38 +03:00
|
|
|
|
2012-07-19 05:16:33 +03:00
|
|
|
There are five types of key-value pair items available:
|
2012-02-25 15:47:23 +03:00
|
|
|
|
2012-03-15 00:55:09 +03:00
|
|
|
Headers (``Name:Value``)
|
2012-07-17 08:01:30 +03:00
|
|
|
Arbitrary HTTP headers. The ``:`` character is used to separate a header's
|
|
|
|
name from its value, e.g., ``X-API-Token:123``.
|
2012-02-25 15:47:23 +03:00
|
|
|
|
2012-03-15 00:55:09 +03:00
|
|
|
Simple data fields (``field=value``)
|
2012-07-17 08:01:30 +03:00
|
|
|
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``.
|
2012-02-25 15:47:23 +03:00
|
|
|
|
2012-03-15 00:55:09 +03:00
|
|
|
Raw JSON fields (``field:=value``)
|
2012-07-17 08:01:30 +03:00
|
|
|
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]``.
|
2012-03-05 02:48:06 +03:00
|
|
|
|
2012-03-15 00:55:09 +03:00
|
|
|
File fields (``field@/path/to/file``)
|
2012-07-17 08:01:30 +03:00
|
|
|
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.
|
2012-03-15 00:55:09 +03:00
|
|
|
|
2012-07-20 23:09:53 +03:00
|
|
|
Query string parameters (``name=:value``)
|
|
|
|
Appends the given name/value pair as a query string parameter to the URL.
|
2012-07-19 05:16:33 +03:00
|
|
|
|
2012-03-15 00:55:09 +03:00
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
Examples
|
|
|
|
^^^^^^^^
|
|
|
|
::
|
|
|
|
|
|
|
|
http PATCH api.example.com/person/1 X-API-Token:123 name=John email=john@example.org age:=29
|
|
|
|
|
|
|
|
|
|
|
|
The following request is issued::
|
2012-02-25 15:47:23 +03:00
|
|
|
|
|
|
|
PATCH /person/1 HTTP/1.1
|
|
|
|
User-Agent: HTTPie/0.1
|
|
|
|
X-API-Token: 123
|
|
|
|
Content-Type: application/json; charset=utf-8
|
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
{"name": "John", "email": "john@example.org", "age": 29}
|
2012-02-27 13:54:41 +03:00
|
|
|
|
2012-03-04 04:26:41 +03:00
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
It can easily be changed to a **form** request using the ``-f``
|
|
|
|
(or ``--form``) flag, which produces::
|
2012-03-04 04:26:41 +03:00
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
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
|
2012-03-04 04:26:41 +03:00
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
age=29&name=John&email=john%40example.org
|
2012-03-04 04:26:41 +03:00
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
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::
|
2012-03-14 14:17:39 +03:00
|
|
|
|
2012-03-15 00:55:09 +03:00
|
|
|
http -f POST example.com/jobs name=John cv@~/Documents/cv.pdf
|
2012-03-14 14:17:39 +03:00
|
|
|
|
2012-03-15 00:55:09 +03:00
|
|
|
The above will send the same request as if the following HTML form were submitted::
|
2012-03-14 14:17:39 +03:00
|
|
|
|
2012-03-15 00:55:09 +03:00
|
|
|
<form enctype="multipart/form-data" method="post" action="http://example.com/jobs">
|
|
|
|
<input type="text" name="name" />
|
2012-03-14 14:17:39 +03:00
|
|
|
<input type="file" name="cv" />
|
|
|
|
</form>
|
|
|
|
|
2012-07-19 05:16:33 +03:00
|
|
|
Query string parameters can be added to any request::
|
|
|
|
|
|
|
|
http GET example.com/ search=:donuts
|
|
|
|
|
|
|
|
Will GET the URL "example.com/?search=donuts".
|
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
A whole request body can be passed in via **``stdin``** instead, in which
|
|
|
|
case it will be used with no further processing::
|
2012-02-25 15:39:38 +03:00
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
echo '{"name": "John"}' | http PATCH example.com/person/1 X-API-Token:123
|
|
|
|
# Or:
|
|
|
|
http POST example.com/person/1 X-API-Token:123 < person.json
|
2012-02-25 15:47:23 +03:00
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
That can be used for **piping services together**. The following example
|
|
|
|
``GET``-s JSON data from the Github API and ``POST``-s it to httpbin.org::
|
2012-06-25 15:50:49 +03:00
|
|
|
|
|
|
|
http -b GET https://api.github.com/repos/jkbr/httpie | http POST httpbin.org/post
|
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
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``::
|
2012-06-25 15:50:49 +03:00
|
|
|
|
|
|
|
http -b https://api.github.com/repos/jkbr/httpie | http httpbin.org/post
|
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
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``::
|
2012-06-29 01:45:31 +03:00
|
|
|
|
|
|
|
http PUT httpbin.org/put @/data/file.xml
|
|
|
|
|
2012-02-27 13:54:41 +03:00
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
Flags
|
|
|
|
^^^^^
|
2012-07-17 08:01:30 +03:00
|
|
|
Most of the flags mirror the arguments understood by ``requests.request``.
|
|
|
|
See ``http -h`` for more details::
|
2012-03-04 04:26:41 +03:00
|
|
|
|
2012-07-17 00:41:27 +03:00
|
|
|
$ http --help
|
2012-04-11 13:44:02 +03:00
|
|
|
usage: http [-h] [--version] [--json | --form] [--traceback]
|
2012-06-24 04:43:08 +03:00
|
|
|
[--pretty | --ugly]
|
|
|
|
[--print OUTPUT_OPTIONS | --verbose | --headers | --body]
|
|
|
|
[--style STYLE] [--auth AUTH] [--auth-type {basic,digest}]
|
|
|
|
[--verify VERIFY] [--proxy PROXY] [--allow-redirects]
|
|
|
|
[--timeout TIMEOUT]
|
|
|
|
[METHOD] URL [ITEM [ITEM ...]]
|
2012-04-11 13:44:02 +03:00
|
|
|
|
2012-04-25 03:10:58 +03:00
|
|
|
HTTPie - cURL for humans. <http://httpie.org>
|
2012-03-04 04:48:31 +03:00
|
|
|
|
|
|
|
positional arguments:
|
2012-04-25 03:10:58 +03:00
|
|
|
METHOD The HTTP method to be used for the request (GET, POST,
|
2012-06-24 04:43:08 +03:00
|
|
|
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
|
|
|
|
GET.
|
2012-04-25 03:10:58 +03:00
|
|
|
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
|
2012-07-19 05:16:33 +03:00
|
|
|
(header:value), a query parameter (name=:value),
|
2012-07-20 22:54:41 +03:00
|
|
|
a data field to be used in the request body
|
2012-07-19 05:16:33 +03:00
|
|
|
(field_name=value), a raw JSON data field
|
2012-06-24 04:43:08 +03:00
|
|
|
(field_name:=value), or a file field
|
2012-04-25 03:10:58 +03:00
|
|
|
(field_name@/path/to/file). You can use a backslash to
|
|
|
|
escape a colliding separator in the field name.
|
2012-03-04 04:48:31 +03:00
|
|
|
|
|
|
|
optional arguments:
|
|
|
|
-h, --help show this help message and exit
|
2012-03-04 13:22:09 +03:00
|
|
|
--version show program's version number and exit
|
2012-07-17 00:41:27 +03:00
|
|
|
--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
|
|
|
|
specified).
|
|
|
|
--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
|
|
|
|
request.
|
2012-03-04 13:22:09 +03:00
|
|
|
--traceback Print exception traceback should one occur.
|
2012-03-14 02:05:44 +03:00
|
|
|
--pretty If stdout is a terminal, the response is prettified by
|
2012-03-04 13:22:09 +03:00
|
|
|
default (colorized and indented if it is JSON). This
|
|
|
|
flag ensures prettifying even when stdout is
|
|
|
|
redirected.
|
2012-03-04 04:48:31 +03:00
|
|
|
--ugly, -u Do not prettify the response.
|
2012-03-14 02:05:44 +03:00
|
|
|
--print OUTPUT_OPTIONS, -p OUTPUT_OPTIONS
|
|
|
|
String specifying what should the output contain. "H"
|
2012-04-25 03:10:58 +03:00
|
|
|
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.
|
2012-03-14 14:17:39 +03:00
|
|
|
--headers, -t Print only the response headers. Shortcut for
|
2012-03-14 02:05:44 +03:00
|
|
|
--print=h.
|
2012-03-14 14:17:39 +03:00
|
|
|
--body, -b Print only the response body. Shortcut for --print=b.
|
2012-03-04 04:48:31 +03:00
|
|
|
--style STYLE, -s STYLE
|
|
|
|
Output coloring style, one of autumn, borland, bw,
|
|
|
|
colorful, default, emacs, friendly, fruity, manni,
|
2012-06-24 04:43:08 +03:00
|
|
|
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).
|
2012-07-17 00:41:27 +03:00
|
|
|
--auth AUTH, -a AUTH username:password. If the password is omitted (-a
|
|
|
|
username), HTTPie will prompt for it.
|
2012-04-25 03:10:58 +03:00
|
|
|
--auth-type {basic,digest}
|
|
|
|
The authentication mechanism to be used. Defaults to
|
|
|
|
"basic".
|
2012-04-11 13:44:02 +03:00
|
|
|
--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
|
|
|
|
"yes".
|
2012-03-04 04:48:31 +03:00
|
|
|
--proxy PROXY String mapping protocol to the URL of the proxy (e.g.
|
|
|
|
http:foo.bar:3128).
|
|
|
|
--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).
|
2012-03-04 15:33:18 +03:00
|
|
|
|
2012-04-25 03:10:58 +03:00
|
|
|
|
2012-06-15 18:13:40 +03:00
|
|
|
Contribute
|
|
|
|
-----------
|
2012-03-04 18:39:57 +03:00
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
`View contributors on GitHub <https://github.com/jkbr/httpie/contributors>`_.
|
2012-03-04 18:39:57 +03:00
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
If you have found a bug or have a feature request, the
|
|
|
|
`issue tracker <https://github.com/jkbr/httpie/issues?state=open>`_ is the
|
|
|
|
place to start a discussion about it.
|
2012-06-15 18:13:40 +03:00
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
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 <https://github.com/jkbr/httpie>`_, make changes in your
|
|
|
|
develop branch and submit a pull request. Note: Pull requests with tests and
|
|
|
|
documentation are 53.6% more awesome :)
|
2012-06-15 18:13:40 +03:00
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
Before a pull requests is submitted, it's a good idea to run the existing
|
|
|
|
suite of tests::
|
2012-06-15 18:13:40 +03:00
|
|
|
|
|
|
|
python setup.py test
|
|
|
|
|
2012-07-17 08:01:30 +03:00
|
|
|
`Tox <http://tox.testrun.org/>`_ can used to conveniently run tests in all of
|
|
|
|
the
|
|
|
|
`supported Python environments <https://github.com/jkbr/httpie/blob/master/tox.ini>`_::
|
2012-06-15 18:13:40 +03:00
|
|
|
|
2012-06-15 18:32:45 +03:00
|
|
|
# Install tox
|
2012-06-15 18:13:40 +03:00
|
|
|
pip install tox
|
2012-06-15 18:32:45 +03:00
|
|
|
|
|
|
|
# Run tests
|
|
|
|
tox
|
2012-03-04 18:39:57 +03:00
|
|
|
|
2012-03-05 02:48:06 +03:00
|
|
|
Changelog
|
|
|
|
---------
|
2012-03-04 15:33:18 +03:00
|
|
|
|
2012-07-17 02:39:30 +03:00
|
|
|
* `0.2.6dev <https://github.com/jkbr/httpie/compare/0.2.5...master>`_
|
2012-07-20 22:54:41 +03:00
|
|
|
* Improved highlighing of HTTP headers.
|
2012-07-19 13:31:02 +03:00
|
|
|
* Added query string parameters (param=:value).
|
2012-07-17 05:20:37 +03:00
|
|
|
* Added support for terminal colors under Windows.
|
2012-07-17 02:35:45 +03:00
|
|
|
* `0.2.5 <https://github.com/jkbr/httpie/compare/0.2.2...0.2.5>`_ (2012-07-17)
|
2012-07-17 08:01:30 +03:00
|
|
|
* Unicode characters in prettified JSON now don't get escaped for
|
|
|
|
improved readability.
|
2012-07-17 01:05:09 +03:00
|
|
|
* --auth now prompts for a password if only a username provided.
|
2012-07-17 08:01:30 +03:00
|
|
|
* 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
|
|
|
|
``--verbose``.
|
2012-07-17 00:41:27 +03:00
|
|
|
* Fixed Content-Type for requests with no data.
|
2012-06-24 17:43:03 +03:00
|
|
|
* `0.2.2 <https://github.com/jkbr/httpie/compare/0.2.1...0.2.2>`_ (2012-06-24)
|
2012-07-17 08:01:30 +03:00
|
|
|
* The ``METHOD`` positional argument can now be omitted (defaults to
|
|
|
|
``GET``, or to ``POST`` with data).
|
2012-06-24 04:43:08 +03:00
|
|
|
* Fixed --verbose --form.
|
2012-06-24 17:43:03 +03:00
|
|
|
* Added support for `Tox <http://tox.testrun.org/>`_.
|
2012-06-15 18:13:40 +03:00
|
|
|
* `0.2.1 <https://github.com/jkbr/httpie/compare/0.2.0...0.2.1>`_ (2012-06-13)
|
2012-06-13 17:01:23 +03:00
|
|
|
* Added compatibility with ``requests-0.12.1``.
|
2012-07-17 08:01:30 +03:00
|
|
|
* Dropped custom JSON and HTTP lexers in favor of the ones newly included
|
|
|
|
in ``pygments-1.5``.
|
2012-06-15 18:13:40 +03:00
|
|
|
* `0.2.0 <https://github.com/jkbr/httpie/compare/0.1.6...0.2.0>`_ (2012-04-25)
|
2012-04-25 03:10:58 +03:00
|
|
|
* Added Python 3 support.
|
2012-07-17 08:01:30 +03:00
|
|
|
* Added the ability to print the HTTP request as well as the response
|
|
|
|
(see ``--print`` and ``--verbose``).
|
2012-04-25 03:10:58 +03:00
|
|
|
* Added support for Digest authentication.
|
2012-07-17 08:01:30 +03:00
|
|
|
* Added file upload support
|
|
|
|
(``http -f POST file_field_name@/path/to/file``).
|
2012-04-25 03:10:58 +03:00
|
|
|
* Improved syntax highlighting for JSON.
|
|
|
|
* Added support for field name escaping.
|
|
|
|
* Many bug fixes.
|
2012-03-05 02:48:06 +03:00
|
|
|
* `0.1.6 <https://github.com/jkbr/httpie/compare/0.1.4...0.1.6>`_ (2012-03-04)
|