HTTPie: human-friendly CLI HTTP client for the API era

Overview

HTTPie

HTTPie: human-friendly CLI HTTP client for the API era

HTTPie (pronounced aitch-tee-tee-pie) is a command-line HTTP client. Its goal is to make CLI interaction with web services as human-friendly as possible. HTTPie is designed for testing, debugging, and generally interacting with APIs & HTTP servers. The http & https commands allow for creating and sending arbitrary HTTP requests. They use simple and natural syntax and provide formatted and colorized output.

Docs Latest version Build Coverage Twitter Chat

HTTPie in action

Getting started

Features

  • Expressive and intuitive syntax
  • Formatted and colorized terminal output
  • Built-in JSON support
  • Forms and file uploads
  • HTTPS, proxies, and authentication
  • Arbitrary request data
  • Custom headers
  • Persistent sessions
  • wget-like downloads

See all features →

Examples

Hello World:

$ https httpie.io/hello

Custom HTTP method, HTTP headers and JSON data:

$ http PUT pie.dev/put X-API-Token:123 name=John

Build and print a request without sending it using offline mode:

$ http --offline pie.dev/post hello=offline

Use GitHub API to post a comment on an Issue with authentication:

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

See more examples →

Community & support

Contributing

Have a look through existing Issues and Pull Requests that you could help with. If you'd like to request a feature or report a bug, please create a GitHub Issue using one of the templates provided.

See contribution guide →

Comments
  • Issue for Testing

    Issue for Testing

    Test httpie advanced usage by posting a comment on this issue:

    http -a <username> https://api.github.com/repos/httpie/httpie/issues/83/comments body='Your Comment'
    
    opened by jakubroztocil 448
  • Option to allow pretty print without alpha sorting

    Option to allow pretty print without alpha sorting

    Right now, the options are colors, format, and all, but often the order of the json returned is intentional and for clarify. It would be nice to be able to pretty print the json without having it's keys sorted :)

    Awesome tool, and thanks very much for everything!

    enhancement 
    opened by patcon 36
  • httpie changing the json fields order in the output

    httpie changing the json fields order in the output

    Wondering how can I force httpie to not change the json fields order?

    curl -i http://localhost:8080/v1/notes/569766aed4c661fba8d85a12
    
    {
      "id": "569766aed4c661fba8d85a12",
      "content": "hi"
    }
    

    with httpie

    http get :8080/v1/notes/569766aed4c661fba8d85a12 
    
    {
      "content": "hi",
      "id": "569766aed4c661fba8d85a12"
    }
    

    I prefer the id field to be always the first. Any thoughts?

    opened by altfatterz 27
  • Multiple test failures in tox py34

    Multiple test failures in tox py34

    Multiple test failures in test_sessions.py.

    When I run:

    tox -e py34 -- tests/test_sessions.py
    

    I get 1, 2, or 3 test failures out of the 7 total tests in that module.

    tests/test_sessions.py::TestSessionFlow::test_session_created_and_reused PASSED
    tests/test_sessions.py::TestSessionFlow::test_session_update FAILED
    tests/test_sessions.py::TestSessionFlow::test_session_read_only FAILED
    tests/test_sessions.py::TestSession::test_session_ignored_header_prefixes PASSED
    tests/test_sessions.py::TestSession::test_session_by_path PASSED
    tests/test_sessions.py::TestSession::test_session_unicode FAILED
    tests/test_sessions.py::TestSession::test_session_default_header_value_overwritten PASSED
    

    More info:

    TestSessionFlow.test_session_update fails with:

    ...
    requests.exceptions.ConnectionError: (
    'Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))
    

    pdb for above error shows:

    > /Users/marca/dev/git-repos/httpie/.tox/py34/lib/python3.4/site-packages/requests/adapters.py(407)send()
    -> raise ConnectionError(err, request=request)
    (Pdb) up
    > /Users/marca/dev/git-repos/httpie/.tox/py34/lib/python3.4/site-packages/requests/sessions.py(569)send()
    -> r = adapter.send(request, **kwargs)
    (Pdb) request.method
    'GET'
    (Pdb) request.url
    'http://127.0.0.1:56308/cookies'
    (Pdb) request.headers
    {'Accept-Encoding': 'gzip, deflate', 'Hello': b'World2', 'Cookie': 'hello=world; hello=world2', 'Connection': 'keep-alive', 'Authorization': b'Basic dXNlcm5hbWU6cGFzc3dvcmQy', 'Accept': '*/*', 'User-Agent': b'HTTPie/0.9.0-dev'}
    (Pdb) kwargs
    {'timeout': 30, 'cert': None, 'proxies': {}, 'stream': True, 'verify': True}
    

    TestSessionFlow.test_session_read_only fails with

    ...
    requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))
    

    pdb for above error shows:

    > /Users/marca/dev/git-repos/httpie/.tox/py34/lib/python3.4/site-packages/requests/adapters.py(407)send()
    -> raise ConnectionError(err, request=request)
    (Pdb) up
    > /Users/marca/dev/git-repos/httpie/.tox/py34/lib/python3.4/site-packages/requests/sessions.py(569)send()
    -> r = adapter.send(request, **kwargs)
    (Pdb) request.method
    'GET'
    (Pdb) request.url
    'http://127.0.0.1:56276/cookies'
    (Pdb) request.headers
    {'User-Agent': b'HTTPie/0.9.0-dev', 'Hello': b'World2', 'Accept-Encoding': 'gzip, deflate', 'Cookie': 'hello=world; hello=world2', 'Connection': 'keep-alive', 'Authorization': b'Basic dXNlcm5hbWU6cGFzc3dvcmQy', 'Accept': '*/*'}
    (Pdb) kwargs
    {'cert': None, 'proxies': {}, 'verify': True, 'timeout': 30, 'stream': True}
    

    TestSession.test_session_unicode fails with:

    ...
    Traceback (most recent call last):
      File ".../httpie/tests/test_sessions.py", line 148, in test_session_unicode
        assert (r2.json['headers']['Authorization']
    KeyError: 'Authorization'
    

    Pertaining to this last error, there is a comment in the test saying:

    147             # FIXME: Authorization *sometimes* is not present on Python3
    
    (Pdb) pprint.pprint(r2.json)
    {'args': {},
     'headers': {'Content-Length': '',
                 'Host': '127.0.0.1:56230',
                 'Test': '[one line of UTF8-encoded unicode text] Ï\x87Ï\x81Ï'},
     'origin': '127.0.0.1',
     'url': 'http://127.0.0.1:56230/get'}
    

    In py33 I also see 1 to 2 test failures -- I have not yet observed TestSession.test_session_unicode failing on py33.

    Most of the time, all these tests pass on py27, though I am seeing test_session_read_only fail occasionally with:

    ____________________________________________________________________ TestSessionFlow.test_session_read_only ____________________________________________________________________
    Traceback (most recent call last):
      File "/Users/marca/dev/git-repos/httpie/tests/test_sessions.py", line 82, in test_session_read_only
        self.start_session(httpbin)
      File "/Users/marca/dev/git-repos/httpie/tests/test_sessions.py", line 48, in start_session
        env=self.env())
      File "/Users/marca/dev/git-repos/httpie/tests/utils.py", line 136, in http
        exit_status = main(args=args, **kwargs)
      File "/Users/marca/dev/git-repos/httpie/.tox/py27/lib/python2.7/site-packages/httpie/core.py", line 112, in main
        response = get_response(args, config_dir=env.config.directory)
      File "/Users/marca/dev/git-repos/httpie/.tox/py27/lib/python2.7/site-packages/httpie/client.py", line 31, in get_response
        read_only=bool(args.session_read_only),
      File "/Users/marca/dev/git-repos/httpie/.tox/py27/lib/python2.7/site-packages/httpie/sessions.py", line 65, in get_response
        response = requests_session.request(**requests_kwargs)
      File "/Users/marca/dev/git-repos/httpie/.tox/py27/lib/python2.7/site-packages/requests/sessions.py", line 457, in request
        resp = self.send(prep, **send_kwargs)
      File "/Users/marca/dev/git-repos/httpie/.tox/py27/lib/python2.7/site-packages/requests/sessions.py", line 595, in send
        history = [resp for resp in gen] if allow_redirects else []
      File "/Users/marca/dev/git-repos/httpie/.tox/py27/lib/python2.7/site-packages/requests/sessions.py", line 189, in resolve_redirects
        allow_redirects=False,
      File "/Users/marca/dev/git-repos/httpie/.tox/py27/lib/python2.7/site-packages/requests/sessions.py", line 569, in send
        r = adapter.send(request, **kwargs)
      File "/Users/marca/dev/git-repos/httpie/.tox/py27/lib/python2.7/site-packages/requests/adapters.py", line 407, in send
        raise ConnectionError(err, request=request)
    ConnectionError: ('Connection aborted.', error(54, 'Connection reset by peer'))
    
    opened by msabramo 26
  • Add support for unix domain sockets

    Add support for unix domain sockets

    To issue HTTP requests to a UNIX domain socket:

    • Use new "http+unix://" scheme in URL.

    • Use urlencoded socket path as the hostname part of the URL. e.g.: for a socket at /tmp/profilesvc.sock, you could do:

      http http+unix://%2Ftmp%2Fprofilesvc.sock/status/pid
      

    This uses https://pypi.python.org/pypi/requests-unixsocket

    Fixes: GH-209 (https://github.com/jakubroztocil/httpie/issues/209)

    Screenshot

    screen shot 2014-11-24 at 6 35 24 pm

    Cc: @shin-, @jakubroztocil, @monsanto, @np, @nuxlli, @matrixise, @remmelt

    opened by msabramo 26
  • requests.exceptions.SSLError: [Errno 8] _ssl.c:507: EOF occurred in violation of protocol

    requests.exceptions.SSLError: [Errno 8] _ssl.c:507: EOF occurred in violation of protocol

    HTTPie 1.0.0-dev
    HTTPie data: /Users/kaji/.httpie
    Requests 2.5.3
    Pygments 2.0.2
    Python 2.7.6 (default, Sep  9 2014, 15:04:36)
    [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] darwin
    Not every SSL website shows though. So, it is tricky. From browser , it is working fine.
    
    >>> requests.request({'allow_redirects': False,
     'auth': None,
     'cert': None,
     'data': OrderedDict(),
     'files': DataDict(),
     'headers': {'User-Agent': 'HTTPie/1.0.0-dev'},
     'method': 'get',
     'params': ParamsDict(),
     'proxies': {},
     'stream': True,
     'timeout': 30,
     'url': u'https://apissl.example.com',
     'verify': True})
    
    Traceback (most recent call last):
      File "/usr/local/bin/http", line 9, in <module>
        load_entry_point('httpie==1.0.0-dev', 'console_scripts', 'http')()
      File "/Library/Python/2.7/site-packages/httpie/core.py", line 112, in main
        response = get_response(args, config_dir=env.config.directory)
      File "/Library/Python/2.7/site-packages/httpie/client.py", line 41, in get_response
        response = requests_session.request(**kwargs)
      File "/Library/Python/2.7/site-packages/requests/sessions.py", line 461, in request
        resp = self.send(prep, **send_kwargs)
      File "/Library/Python/2.7/site-packages/requests/sessions.py", line 573, in send
        r = adapter.send(request, **kwargs)
      File "/Library/Python/2.7/site-packages/requests/adapters.py", line 431, in send
        raise SSLError(e, request=request)
    requests.exceptions.SSLError: [Errno 8] _ssl.c:507: EOF occurred in violation of protocol
    
    opened by kaji-bikash 24
  • Syntax for nested JSON

    Syntax for nested JSON

    The simple examples work, but what about nested data? In curl I do something like this:

    -d
    '"credentials": { "username": "me", "key": "my-key"} }'

    How can I do this with httpie?

    enhancement planned needs product design 
    opened by sym3tri 23
  • Request to add `-d, --data` option for raw body like curl

    Request to add `-d, --data` option for raw body like curl

    The request is simple, just to add an option to pass raw data like curl does:

    http :/api/user -d 'MyRawData...'
    

    I know that in mostly cases if you are sending JSON or form data, it can be achieved with the "request items", like:

    http :/api/hey say=Hello to=me …
    

    And it will converted to the proper format depending of the content type, that is awesome! And if you have something that is not a JSON or form data to send, you can do something like:

    echo 'MyRawData...' | http :/api/hey
    

    But this is impractical, the main idea of HTTPie is cURL-like tool for humans , and this case is far of that principle, in fact, curl is more practical than HTTPie for the previous example. Adding more than one command and pipe them with ugly characters like | < just because a simple option is missing doesn't sound human-friendly.

    What's wrong with add the -d option to http?

    opened by mrsarm 22
  • httpie output has lots of additional characters on windows

    httpie output has lots of additional characters on windows

    Running http GET httpie.org on windows results in a load of extra characters being printed out:

    HTTP/1.1 ←[39;49;00m←[34m302←[39;49;00m←[33m Found←[39;49;00m
    Date:←[39;49;00m←[33m Mon, 19 Mar 2012 15:13:17 GMT←[39;49;00m
    Server:←[39;49;00m←[33m Apache←[39;49;00m
    X-Awesome:←[39;49;00m←[33m Thanks for trying HTTPie :)←[39;49;00m
    Location:←[39;49;00m←[33m https://github.com/jkbr/httpie←[39;49;00m
    Cache-Control:←[39;49;00m←[33m max-age=1800←[39;49;00m
    Expires:←[39;49;00m←[33m Mon, 19 Mar 2012 15:43:17 GMT←[39;49;00m
    Content-Length:←[39;49;00m←[33m 214←[39;49;00m
    Content-Type:←[39;49;00m←[33m text/html; charset=iso-8859-1←[39;49;00m
    
    ←[36m<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">←[39;49;00m
    ←[34;01m<html←[39;49;00m←[34;01m>←[39;49;00m←[34;01m<head←[39;49;00m←[34;01m>←[39;49;00m
    ←[34;01m<title←[39;49;00m←[34;01m>←[39;49;00m302 Found←[39;49;00m←[34;01m</title>←[39;49;00m
    ←[34;01m</head>←[39;49;00m←[34;01m<body←[39;49;00m←[34;01m>←[39;49;00m
    ←[34;01m<h1←[39;49;00m←[34;01m>←[39;49;00mFound←[39;49;00m←[34;01m</h1>←[39;49;00m
    ←[34;01m<p←[39;49;00m←[34;01m>←[39;49;00mThe document has moved ←[39;49;00m←[34;01m<a←[39;49;00m ←[39;49;00m←[36mhref=←[39;49;00m←[33m"https://github.com/jkbr/httpie"←[39;49;00m←[34;01m>←[39;49;00mhere←[39;49;00m←[34;01m</a>←[39;49;00m.←[39;49;00m←[34;01m</p>←[39;49;00m
    

    I'm guessing that these are escape codes that provide the colored output on other operating systems. Running http -u GET httpie.org results in correct (though monochrome) output.

    It'd be nice to get cross platform colored output like provided by clint.

    bug windows 
    opened by obmarg 20
  • Brew installed version doesn't work with plugins

    Brew installed version doesn't work with plugins

    Brew is listed as the recommended way of installing httpie on macOS. However, it doesn't work with auth plugins.

    For example, if you pip3 install requests-hawk and then run http --help hawk will not show as an auth type. If you pip3 install httpie-oauth it will install httpie via pip as a dependency and overwrite the brew installed link in /usr/local/bin/http and now all the plugins will show because it isn't using the brew installed version.

    I suggest changing the documentation to read pip3 install httpie as the recommended method of installing on macOS.

    bug docs 
    opened by rshurts 19
  • Not working on OS X Mavericks

    Not working on OS X Mavericks

    When I tried to run a command on OS X Mavericks, I get the following error:

    batuhanicoz at batuhanicoz-mbp2 in ~
    ○ http GET https://api.testapps.local.bt.hn/sdfdssad/dasa
    Traceback (most recent call last):
      File "/usr/local/bin/http", line 5, in <module>
        from pkg_resources import load_entry_point
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2603, in <module>
        working_set.require(__requires__)
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 666, in require
        needed = self.resolve(parse_requirements(requirements))
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 565, in resolve
        raise DistributionNotFound(req)  # XXX put more info here
    pkg_resources.DistributionNotFound: httpie==0.6.0
    
    bug 
    opened by batuhan 19
  • Bump mislav/bump-homebrew-formula-action from 1 to 2

    Bump mislav/bump-homebrew-formula-action from 1 to 2

    Bumps mislav/bump-homebrew-formula-action from 1 to 2.

    Release notes

    Sourced from mislav/bump-homebrew-formula-action's releases.

    bump-homebrew-formula 2.0

    What's Changed

    New Contributors

    bump-homebrew-formula 1.16

    bump-homebrew-formula 1.14

    • Ignore HTTP 409 error when fast-forwading the main branch of homebrew-tap fork

    bump-homebrew-formula 1.13

    • Add create-pullrequest input to control whether or not a PR is submitted to homebrew-tap
    • Add download-sha256 input to define the SHA256 checksum of the archive at download-url
    • Fix creating a new branch in the forked repo failing with HTTP 404

    bump-homebrew-formula 1.12

    • Fix Actions CJS loader halting on foo?.bar JS syntax

    bump-homebrew-formula 1.11

    • New optional formula-path input accepts the filename of the formula file to edit (default Formula/<formula-name>.rb).
    • Remove revision N lines when bumping Homebrew formulae.

    bump-homebrew-formula 1.10

    bump-homebrew-formula 1.9

    • Fix following multiple HTTP redirects while calculating checksum for download-url

    bump-homebrew-formula 1.8

    • Enable JavaScript source maps for better failure debugging

    bump-homebrew-formula 1.7

    • Allow download-url as input parameter

    • Add support for git-based download-url

    bump-homebrew-formula 1.6

    • Control the git commit message template being used for updating the formula file via the commit-message action input

    bump-homebrew-formula 1.5

    • Support detection version from https://github.com/OWNER/REPO/releases/download/TAG/FILE download URLs

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Nested JSON with property name containing colon interpreted as header declaration

    Nested JSON with property name containing colon interpreted as header declaration

    The Nested JSON CLI syntax allows me to construct a request body without having to type out the raw JSON (loving it), but it seems to collide with how arguments can be interpreted as headers. I'm expecting http POST httpie.io/hello foo[bar:baz]=foobar --print=HB and http POST httpie.io/hello foo:='{"bar:baz": "foobar"}' --print=HB to produce identical results, but when using the nested JSON syntax, httpie interprets my argument as the foo[bar header (which is an invalid HTTP header field name) having the baz]=foobar value.

    $ http POST httpie.io/hello foo[bar:baz]=foobar --print=HB
    POST /hello HTTP/1.1
    Accept: */*
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Content-Length: 0
    Host: httpie.io
    User-Agent: HTTPie/3.2.1
    foo[bar: baz]=foobar
    

    should produce the same result as

    $ http POST httpie.io/hello foo:='{"bar:baz": "foobar"}' --print=HB
    POST /hello HTTP/1.1
    Accept: application/json, */*;q=0.5
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Content-Length: 30
    Content-Type: application/json
    Host: httpie.io
    User-Agent: HTTPie/3.2.1
    
    {
        "foo": {
            "bar:baz": "foobar"
        }
    }
    

    I think it's reasonable that nested JSON object specification on the CLI should take precedence over the intent to specify an http header, since the latter would be illegal and not accepted by many HTTP servers. For reference, xh also contains this problem, but doesn't attempt to make the request:

    $ xh POST httpie.io/hello foo[bar:baz]=foobar --print=HB
    xh: error: invalid HTTP header name
    
    bug new 
    opened by ingemaradahl 5
  • Interview partners for research about communication in GitHub projects wanted

    Interview partners for research about communication in GitHub projects wanted

    Hi. My name is Verena Ebert, and I am a PhD student at the University of Stuttgart in Germany.
    A few months ago, I have examined 90 GitHub projects to see what communication channels they use and how they write about them in the written documents, for example README or wiki. If you are interested in the previous results, you can find them here: https://arxiv.org/abs/2205.01440 Your project was one of these 90 projects and, therefore, I am interested in further details about your communication setup.

    To gather more data about your communication setup, I kindly ask one of the maintainers to do an interview with me. The interview will be about 30-35 minutes long and via Skype, WebEx or any other provider you prefer. The interviews should be done in November 2022, if possible.

    In this interview, I would like to ask some questions about the reasons behind the channels, to understand the thoughts of the maintainers in addition to the written information.

    The long goal of my PhD is to understand how communication works in GitHub projects and how a good set of communication channels and information for other maintainers and developers looks like. One possible outcome is a COMMUNICATION.md with instructions and tips about which channels could be useful and how these channels should be introduced to other projects participants. Of course, if you are interested, I will keep you up to date about any further results in my research.

    If you are interested in doing an interview, please respond here or contact me via email ([email protected]). We will then make an appointment for the interview at a time and date that suits you.

    If you agree, I would like to record the interview and transcribe the spoken texts into anonymized written texts. In this case, I will send you the transcript for corrections afterwards. Only if you agree, the transcripts or parts of it would be part of a publication.

    new 
    opened by verenya 0
  • Authorization header not printed when using digest auth

    Authorization header not printed when using digest auth

    http -v -A digest -a username:password pie.dev/digest-auth/auth/username/password doesn't print the Authorization request header

    I guess this is challenging because the header is populated in the requests library


    > http -v -A digest -a username:password pie.dev/digest-auth/auth/username/password --debug
    HTTPie 3.2.1
    Requests 2.26.0
    Pygments 2.7.1
    Python 3.9.2 (default, Feb 28 2021, 17:03:44) 
    [GCC 10.2.1 20210110]
    /usr/bin/python3
    Linux 5.10.142-19739-g5899aa8f604c
    
    <Environment {'apply_warnings_filter': <function Environment.apply_warnings_filter at 0x7aa7d104e700>,
     'args': Namespace(),
     'as_silent': <function Environment.as_silent at 0x7aa7d104e5e0>,
     'colors': 256,
     'config': {'default_options': []},
     'config_dir': PosixPath('/home/matt/.config/httpie'),
     'devnull': <property object at 0x7aa7d10f90e0>,
     'is_windows': False,
     'log_error': <function Environment.log_error at 0x7aa7d104e670>,
     'program_name': 'http',
     'quiet': 0,
     'rich_console': <functools.cached_property object at 0x7aa7d1118d00>,
     'rich_error_console': <functools.cached_property object at 0x7aa7d10b1ee0>,
     'show_displays': True,
     'stderr': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>,
     'stderr_isatty': True,
     'stdin': <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>,
     'stdin_encoding': 'utf-8',
     'stdin_isatty': True,
     'stdout': <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>,
     'stdout_encoding': 'utf-8',
     'stdout_isatty': True}>
    
    <PluginManager {'adapters': [],
     'auth': [<class 'httpie.plugins.builtin.BasicAuthPlugin'>,
              <class 'httpie.plugins.builtin.DigestAuthPlugin'>,
              <class 'httpie.plugins.builtin.BearerAuthPlugin'>],
     'converters': [],
     'formatters': [<class 'httpie.output.formatters.headers.HeadersFormatter'>,
                    <class 'httpie.output.formatters.json.JSONFormatter'>,
                    <class 'httpie.output.formatters.xml.XMLFormatter'>,
                    <class 'httpie.output.formatters.colors.ColorFormatter'>]}>
    
    >>> requests.request(**{'auth': <requests.auth.HTTPDigestAuth object at 0x7aa7d0ddce80>,
     'data': RequestJSONDataDict(),
     'headers': <HTTPHeadersDict('User-Agent': b'HTTPie/3.2.1')>,
     'method': 'get',
     'params': <generator object MultiValueOrderedDict.items at 0x7aa7d0c63ac0>,
     'url': 'http://pie.dev/digest-auth/auth/username/password'})
    
    GET /digest-auth/auth/username/password HTTP/1.1
    Accept: */*
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Host: pie.dev
    User-Agent: HTTPie/3.2.1
    
    
    
    HTTP/1.1 200 OK
    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Origin: *
    CF-Cache-Status: DYNAMIC
    CF-RAY: 764f8c0d5d7e72c7-LHR
    Connection: keep-alive
    Content-Encoding: gzip
    Content-Type: application/json
    Date: Fri, 04 Nov 2022 18:52:29 GMT
    NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
    Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=ZopT9m6iwhzwDZHMAedQf0kZ4yELEqrElPOpkJwwm7w4BqJi9qVHrFlwBmKpWJT8%2FZxbLcdm%2B2HN2h2Cz%2FO0eS6JPqGeqN9wOum0%2F7wvvFv6f465Gu%2BEUNVE"}],"group":"cf-nel","max_age":604800}
    Server: cloudflare
    Set-Cookie: fake=fake_value; Path=/
    Set-Cookie: stale_after=never; Path=/
    Transfer-Encoding: chunked
    alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
    
    {
        "authenticated": true,
        "user": "username"
    }
    
    bug new 
    opened by hickford 1
  • Digest authentication with qop=auth-int fails

    Digest authentication with qop=auth-int fails "TypeError: expected string or bytes-like object"

    > http -A digest -a username:password pie.dev/digest-auth/auth-int/username/password
    
    http: error: TypeError: expected string or bytes-like object
    

    See https://pie.dev/#/Auth/get_digest_auth__qop___user___passwd_ for more about qop

    Debug output

    Please re-run the command with --debug, then copy the entire command & output and paste both below:

    > http --debug -A digest -a username:password pie.dev/digest-auth/auth-int/username/password
    HTTPie 3.2.1
    Requests 2.26.0
    Pygments 2.7.1
    Python 3.9.2 (default, Feb 28 2021, 17:03:44) 
    [GCC 10.2.1 20210110]
    /usr/bin/python3
    Linux 5.10.142-19739-g5899aa8f604c
    
    <Environment {'apply_warnings_filter': <function Environment.apply_warnings_filter at 0x7a2958066700>,
     'args': Namespace(),
     'as_silent': <function Environment.as_silent at 0x7a29580665e0>,
     'colors': 256,
     'config': {'default_options': []},
     'config_dir': PosixPath('/home/matt/.config/httpie'),
     'devnull': <property object at 0x7a29580d0b80>,
     'is_windows': False,
     'log_error': <function Environment.log_error at 0x7a2958066670>,
     'program_name': 'http',
     'quiet': 0,
     'rich_console': <functools.cached_property object at 0x7a2958130d30>,
     'rich_error_console': <functools.cached_property object at 0x7a29580c7f10>,
     'show_displays': True,
     'stderr': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>,
     'stderr_isatty': True,
     'stdin': <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>,
     'stdin_encoding': 'utf-8',
     'stdin_isatty': True,
     'stdout': <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>,
     'stdout_encoding': 'utf-8',
     'stdout_isatty': True}>
    
    <PluginManager {'adapters': [],
     'auth': [<class 'httpie.plugins.builtin.BasicAuthPlugin'>,
              <class 'httpie.plugins.builtin.DigestAuthPlugin'>,
              <class 'httpie.plugins.builtin.BearerAuthPlugin'>],
     'converters': [],
     'formatters': [<class 'httpie.output.formatters.headers.HeadersFormatter'>,
                    <class 'httpie.output.formatters.json.JSONFormatter'>,
                    <class 'httpie.output.formatters.xml.XMLFormatter'>,
                    <class 'httpie.output.formatters.colors.ColorFormatter'>]}>
    
    >>> requests.request(**{'auth': <requests.auth.HTTPDigestAuth object at 0x7a2957e9e190>,
     'data': RequestJSONDataDict(),
     'headers': <HTTPHeadersDict('User-Agent': b'HTTPie/3.2.1')>,
     'method': 'get',
     'params': <generator object MultiValueOrderedDict.items at 0x7a2957c7bac0>,
     'url': 'http://pie.dev/digest-auth/auth-int/username/password'})
    
    
    http: error: TypeError: expected string or bytes-like object
    
    
    Traceback (most recent call last):
      File "/home/matt/.local/bin/http", line 8, in <module>
        sys.exit(main())
      File "/home/matt/.local/lib/python3.9/site-packages/httpie/__main__.py", line 9, in main
        exit_status = main()
      File "/home/matt/.local/lib/python3.9/site-packages/httpie/core.py", line 162, in main
        return raw_main(
      File "/home/matt/.local/lib/python3.9/site-packages/httpie/core.py", line 140, in raw_main
        handle_generic_error(e)
      File "/home/matt/.local/lib/python3.9/site-packages/httpie/core.py", line 100, in raw_main
        exit_status = main_program(
      File "/home/matt/.local/lib/python3.9/site-packages/httpie/core.py", line 213, in program
        for message in messages:
      File "/home/matt/.local/lib/python3.9/site-packages/httpie/client.py", line 111, in collect_messages
        response = requests_session.send(
      File "/home/matt/.local/lib/python3.9/site-packages/requests/sessions.py", line 662, in send
        r = dispatch_hook('response', hooks, r, **kwargs)
      File "/home/matt/.local/lib/python3.9/site-packages/requests/hooks.py", line 31, in dispatch_hook
        _hook_data = hook(hook_data, **kwargs)
      File "/home/matt/.local/lib/python3.9/site-packages/requests/auth.py", line 269, in handle_401
        _r = r.connection.send(prep, **kwargs)
      File "/home/matt/.local/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
        resp = conn.urlopen(
      File "/home/matt/.local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
        httplib_response = self._make_request(
      File "/home/matt/.local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
        conn.request(method, url, **httplib_request_kw)
      File "/home/matt/.local/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
        super(HTTPConnection, self).request(method, url, body=body, headers=headers)
      File "/usr/lib/python3.9/http/client.py", line 1255, in request
        self._send_request(method, url, body, headers, encode_chunked)
      File "/usr/lib/python3.9/http/client.py", line 1296, in _send_request
        self.putheader(hdr, value)
      File "/home/matt/.local/lib/python3.9/site-packages/urllib3/connection.py", line 224, in putheader
        _HTTPConnection.putheader(self, header, *values)
      File "/usr/lib/python3.9/http/client.py", line 1232, in putheader
        if _is_illegal_header_value(values[i]):
    TypeError: expected string or bytes-like object```
    
    bug new 
    opened by hickford 0
Releases(3.2.1)
  • 3.2.1(May 6, 2022)

    • Improved support for determining auto-streaming when the Content-Type header includes encoding information. (#1383)
    • Fixed the display of the crash happening in the secondary process for update checks. (#1388)

    → Join our Discord community: https://httpie.io/discord → Install HTTPie: https://httpie.io/docs/cli/installation → Learn more: https://httpie.io

    Source code(tar.gz)
    Source code(zip)
    http(9.44 MB)
    httpie-3.2.1.deb(26.90 MB)
  • 3.2.0(May 5, 2022)

    • Added a warning for notifying the user about the new updates. (#1336)
    • Added support for single binary executables. (#1330)
    • Added support for man pages (and auto generation of them from the parser declaration). (#1317)
    • Added http --manual for man pages & regular manual with pager. (#1343)
    • Added support for session persistence of repeated headers with the same name. (#1335)
    • Added support for sending Secure cookies to the localhost (and .local suffixed domains). (#1308)
    • Improved UI for the progress bars. (#1324)
    • Fixed redundant creation of Content-Length header on OPTIONS requests. (#1310)
    • Fixed blocking of warning thread on some use cases. (#1349)
    • Changed httpie plugins to the new httpie cli namespace as httpie cli plugins (httpie plugins continues to work as a hidden alias). (#1320)
    • Soft deprecated the --history-print. (#1380)

    → Join our Discord community: https://httpie.io/discord → Install HTTPie: https://httpie.io/docs/cli/installation → Learn more: https://httpie.io

    Source code(tar.gz)
    Source code(zip)
    http(9.44 MB)
    httpie-3.2.0.deb(26.90 MB)
  • 3.1.0(Mar 7, 2022)

    • SECURITY Fixed the vulnerability that caused exposure of cookies on redirects to third party hosts. (#1312)
    • Fixed escaping of integer indexes with multiple backslashes in the nested JSON builder. (#1285)
    • Fixed displaying of status code without a status message on non-auto themes. (#1300)
    • Fixed redundant issuance of stdin detection warnings on some rare cases due to underlying implementation. (#1303)
    • Fixed double --quiet so that it will now suppress all python level warnings. (#1271)
    • Added support for specifying certificate private key passphrases through --cert-key-pass and prompts. (#946)
    • Added httpie cli export-args command for exposing the parser specification for the http/https commands. (#1293)
    • Improved regulation of top-level arrays. (#1292)
    • Improved UI layout for standalone invocations. (#1296)

    → Join our Discord community: https://httpie.io/discord → Install HTTPie: https://httpie.io/docs/cli/installation → Learn more: https://httpie.io

    Source code(tar.gz)
    Source code(zip)
    http(9.19 MB)
    httpie_3.1.0_amd64.deb(26.35 MB)
  • 3.0.2(Jan 24, 2022)

  • 3.0.1(Jan 23, 2022)

  • 3.0.0(Jan 21, 2022)

    What’s new in HTTPie for Terminal 3.0 →

    🌲️ Nested JSON 🔌 Plugin manager ⏱️ Response metadata 🚀 Speed-ups 🎨 Improved UI/UX ✨ Other minor features 🪲 Bug fixes

    • Dropped support for Python 3.6. (#1177)
    • Improved startup time by 40%. (#1211)
    • Added support for nested JSON syntax. (#1169)
    • Added httpie plugins interface for plugin management. (#566)
    • Added support for Bearer authentication via --auth-type=bearer (#1215).
    • Added support for quick conversions of pasted URLs into HTTPie calls by adding a space after the protocol name ($ https ://pie.devhttps://pie.dev). (#1195)
    • Added support for sending multiple HTTP header lines with the same name. (#130)
    • Added support for receiving multiple HTTP headers lines with the same name. (#1207)
    • Added support for basic JSON types on --form/--multipart when using JSON only operators (:=/:[email protected]). (#1212)
    • Added support for automatically enabling --stream when Content-Type is text/event-stream. (#376)
    • Added support for displaying the total elapsed time through --meta/-vv or --print=m. (#243)
    • Added new pie-dark/pie-light (and pie) styles that match with HTTPie for Web and Desktop. (#1237)
    • Added support for better error handling on DNS failures. (#1248)
    • Added support for storing prompted passwords in the local sessions. (#1098)
    • Added warnings about the --ignore-stdin, when there is no incoming data from stdin. (#1255)
    • Fixed crashing due to broken plugins. (#1204)
    • Fixed auto addition of XML declaration to every formatted XML response. (#1156)
    • Fixed highlighting when Content-Type specifies charset. (#1242)
    • Fixed an unexpected crash when --raw is used with --chunked. (#1253)
    • Changed the default Windows theme from fruity to auto. (#1266)

    → Join our Discord community: https://httpie.io/discord → Install HTTPie: https://httpie.io/docs/cli/installation → Learn more: https://httpie.io

    Source code(tar.gz)
    Source code(zip)
  • 2.6.0(Oct 14, 2021)

    Blog post: What’s new in HTTPie 2.6.0

    • Added support for formatting & coloring of JSON bodies preceded by non-JSON data (e.g., an XXSI prefix). (#1130)
    • Added charset auto-detection when Content-Type doesn’t include it. (#1110, #1168)
    • Added --response-charset to allow overriding the response encoding for terminal display purposes. (#1168)
    • Added --response-mime to allow overriding the response mime type for coloring and formatting for the terminal. (#1168)
    • Added the ability to silence warnings through using -q or --quiet twice (e.g. -qq) (#1175)
    • Added installed plugin list to --debug output. (#1165)
    • Fixed duplicate keys preservation in JSON data. (#1163)

    → Join our Discord community: https://httpie.io/discord → Install HTTPie: https://httpie.io/docs#installation → Learn more: https://httpie.io

    Source code(tar.gz)
    Source code(zip)
  • 2.5.0(Sep 6, 2021)

    Blog post: What’s new in HTTPie 2.5.0

    • Added --raw to allow specifying the raw request body without extra processing as an alternative to stdin. (#534)
    • Added support for XML formatting. (#1129)
    • Added internal support for file-like object responses to improve adapter plugin support. (#1094)
    • Fixed --continue --download with a single byte to be downloaded left. (#1032)
    • Fixed --verbose HTTP 307 redirects with streamed request body. (#1088)
    • Fixed handling of session files with Cookie: followed by other headers. (#1126)

    → Join our Discord community: https://httpie.io/chat → Install HTTPie: https://httpie.io/docs#installation → Learn more: https://httpie.io

    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Feb 6, 2021)

    HTTPie /aitch-tee-tee-pie/ CLI is a human-friendly CLI HTTP client for the API era.

    The 2.4.0 release introduces the following improvements:

    • Added support for --session cookie expiration based on Set-Cookie: max-age=<n>. (#1029)
    • Show a --check-status warning with --quiet as well, not only when the output is redirected. (#1026)
    • Fixed upload with --session (#1020).
    • Fixed a missing blank line between request and response (#1006).

    Join our Discord community: https://httpie.io/chat Install HTTPie: https://httpie.io/docs#installation Learn more: https://httpie.io

    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(Oct 25, 2020)

    • Added support for streamed uploads (#201).
    • Added support for multipart upload streaming (#684).
    • Added support for body-from-file upload streaming (http httpbin.org/post @file).
    • Added --chunked to enable chunked transfer encoding (#753).
    • Added --multipart to allow multipart/form-data encoding for non-file --form requests as well.
    • Added support for preserving field order in multipart requests (#903).
    • Added --boundary to allow a custom boundary string for multipart/form-data requests.
    • Added support for combining cookies specified on the CLI and in a session file (#932).
    • Added out of the box SOCKS support with no extra installation (#904).
    • Added --quiet, -q flag to enforce silent behaviour.
    • Fixed the handling of invalid expires dates in Set-Cookie headers (#963).
    • Removed Tox testing entirely (#943).

    HTTPie /aitch-tee-tee-pie/ CLI is a user-friendly command-line HTTP client for the API era. It comes with JSON support, syntax highlighting, persistent sessions, wget-like downloads, plugins, and more.

    Learn more: https://httpie.org Install HTTPie: https://httpie.org/docs#installation

    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Jun 18, 2020)

    • Added support for custom content types for uploaded files (#927, #668).
    • Added support for $XDG_CONFIG_HOME (#920).
    • Added support for Set-Cookie-triggered cookie expiration (#853).
    • Added --format-options to allow disabling sorting, changing JSON indent size, etc. (#128)
    • Added --sorted and --unsorted shortcuts for (un)setting all sorting-related --format-options. (#128)
    • Added --ciphers to allow configuring OpenSSL ciphers (#870).
    • Added netrc support for auth plugins. Enabled for --auth-type=basic and digest, 3rd parties may opt in (#718, #719, #852, #934).
    • Fixed built-in plugins-related circular imports (#925).
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Apr 18, 2020)

    • Added --path-as-is to bypass dot segment (/../ or /./) URL squashing (#895).
    • Changed the default Accept header value for JSON requests from application/json, */* to application/json, */*;q=0.5 to clearly indicate preference (#488).
    • Fixed --form file upload mixed with redirected stdin error handling (#840).
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Jan 12, 2020)

    • Removed Python 2.7 support (Python 3.6+ is now required).
    • Added --offline to allow building an HTTP request and printing it but not actually sending it over the network.
    • Replaced the old collect-all-then-process handling of HTTP communication with one-by-one processing of each HTTP request or response as they become available. This means that you can see headers immediately, see what is being sent even if the request fails, etc.
    • Removed automatic config file creation to avoid concurrency issues.
    • Removed the default 30-second connection --timeout limit.
    • Removed Python’s default limit of 100 response headers.
    • Added --max-headers to allow setting the max header limit.
    • Added --compress to allow request body compression.
    • Added --ignore-netrc to allow bypassing credentials from .netrc.
    • Added https alias command with https:// as the default scheme.
    • Added $ALL_PROXY documentation.
    • Added type annotations throughout the codebase.
    • Added tests/ to the PyPi package for the convenience of downstream package maintainers.
    • Fixed an error when stdin was a closed fd.
    • Improved --debug output formatting.
    Source code(tar.gz)
    Source code(zip)
  • 1.0.3(Aug 26, 2019)

    Fixed CVE-2019-10751 — the way the output filename is generated for --download requests without --output resulting in a redirect has been changed to only consider the initial URL as the base for the generated filename, and not the final one. This fixes a potential security issue under the following scenario:

    1. A --download request with no explicit --output is made (e.g., $ http -d example.org/file.txt), instructing HTTPie to generate the output filename from the Content-Disposition response header, or from the URL if the header is not provided.
    2. The server handling the request has been modified by an attacker and instead of the expected response the URL returns a redirect to another URL, e.g., attacker.example.org/.bash_profile, whose response does not provide a Content-Disposition header (i.e., the base for the generated filename becomes .bash_profile instead of file.txt).
    3. Your current directory doesn’t already contain .bash_profile (i.e., no unique suffix is added to the generated filename).
    4. You don’t notice the potentially unexpected output filename as reported by HTTPie in the console output (e.g., Downloading 100.00 B to ".bash_profile").
    Source code(tar.gz)
    Source code(zip)
  • 1.0.2(Nov 14, 2018)

  • 1.0.1(Nov 14, 2018)

  • 1.0.0(Nov 2, 2018)

    • Added --style=auto which follows the terminal ANSI color styles.
    • Added support for selecting TLS 1.3 via --ssl=tls1.3 (available once implemented in upstream libraries).
    • Added true/false as valid values for --verify (in addition to yes/no) and the boolean value is case-insensitive.
    • Changed the default --style from solarized to auto (on Windows it stays fruity).
    • Fixed default headers being incorrectly case-sensitive.
    • Removed Python 2.6 support.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.9(Jul 22, 2018)

  • 0.9.8(Dec 8, 2016)

    • Extended auth plugin API.
    • Added exit status code 7 for plugin errors.
    • Added support for curses-less Python installations.
    • Fixed REQUEST_ITEM arg incorrectly being reported as required.
    • Improved CTRL-C interrupt handling.
    • Added the standard exit status code 130 for keyboard interrupts.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.6(Aug 13, 2016)

    • Added Python 3 as a dependency for Homebrew installations to ensure some of the newer HTTP features work out of the box for macOS users (starting with HTTPie 0.9.4.).
    • Added the ability to unset a request header with Header:, and send an empty value with Header;.
    • Added --default-scheme <URL_SCHEME> to enable things like $ alias https='http --default-scheme=https.
    • Added -I as a shortcut for --ignore-stdin.
    • Added fish shell completion (located in extras/httpie-completion.fish in the Github repo).
    • Updated requests to 2.10.0 so that SOCKS support can be added via pip install requests[socks].
    • Changed the default JSON Accept header from application/json to application/json, */*.
    • Changed the pre-processing of request HTTP headers so that any leading and trailing whitespace is removed.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.4(Jul 1, 2016)

    • Added Content-Type of files uploaded in multipart/form-data requests
    • Added --ssl=<PROTOCOL> to specify the desired SSL/TLS protocol version to use for HTTPS requests.
    • Added JSON detection with --json, -j to work around incorrect Content-Type
    • Added --all to show intermediate responses such as redirects (with --follow)
    • Added --history-print, -P WHAT to specify formatting of intermediate responses
    • Added --max-redirects=N (default 30)
    • Added -A as short name for --auth-type
    • Added -F as short name for --follow
    • Removed the implicit_content_type config option (use "default_options": ["--form"] instead)
    • Redirected stdout doesn't trigger an error anymore when --output FILE is set
    • Changed the default --style back to solarized for better support of light and dark terminals
    • Improved --debug output
    • Fixed --session when used with --download
    • Fixed --download to trim too long filenames before saving the file
    • Fixed the handling of Content-Type with multiple +subtype parts
    • Removed the XML formatter as the implementation suffered from multiple issues
    Source code(tar.gz)
    Source code(zip)
  • 0.9.3(Jan 1, 2016)

    • Changed the default color --style from solarized to monokai
    • Added basic Bash autocomplete support (need to be installed manually)
    • Added request details to connection error messages
    • Fixed 'requests.packages.urllib3' has no attribute 'disable_warnings' errors that occurred in some installations
    • Fixed colors and formatting on Windows
    • Fixed --auth prompt on Windows
    Source code(tar.gz)
    Source code(zip)
  • 0.9.2(Feb 24, 2015)

  • 0.9.1(Feb 7, 2015)

  • 0.9.0(Jan 31, 2015)

    • Added --cert and --cert-key parameters to specify a client side certificate and private key for SSL
    • Improved unicode support.
    • Improved terminal color depth detection via curses.
    • To make it easier to deal with Windows paths in request items, \ now only escapes special characters (the ones that are used as key-value separators by HTTPie).
    • Switched from unittest to pytest.
    • Added Python wheel suppor.
    • Various test suite improvements.
    • Added CONTRIBUTING_.
    • Fixed User-Agent overwriting when used within a session.
    • Fixed handling of empty passwords in URL credentials.
    • Fixed multiple file uploads with the same form field name.
    • Fixed --output=/dev/null on Linux.
    • Miscellaneous bugfixes.
    Source code(tar.gz)
    Source code(zip)
  • 0.8.0(Jan 25, 2014)

  • 0.7.1(Feb 1, 2015)

  • 0.7.0(Feb 1, 2015)

  • 0.6.0(Feb 1, 2015)

    • XML data is now formatted.
    • --session and --session-read-only now also accept paths to session files (eg. http --session=/tmp/session.json example.org).
    Source code(tar.gz)
    Source code(zip)
  • 0.5.1(Feb 1, 2015)

Owner
Making APIs simple and intuitive for those building the tools, apps and technologies of our time. Join us: pie.co/jobs
null
rh: user-friendly command-line HTTP client

Rust HTTP Cli The command name in your terminal is rh. rh: user-friendly command-line HTTP client rh is a user-friendly, lightweight and performant co

null 7 Nov 23, 2022
A more modern http framework benchmarker supporting HTTP/1 and HTTP/2 benchmarks.

rewrk A more modern http framework benchmark utility.

Harrison Burt 264 Nov 22, 2022
Fast and friendly HTTP server framework for async Rust

Tide Serve the web API Docs | Contributing | Chat Tide is a minimal and pragmatic Rust web application framework built for rapid development. It comes

http-rs 4k Nov 26, 2022
An easy and powerful Rust HTTP Client

reqwest An ergonomic, batteries-included HTTP Client for Rust. Plain bodies, JSON, urlencoded, multipart Customizable redirect policy HTTP Proxies HTT

Sean McArthur 6.6k Nov 30, 2022
FeignHttp is a declarative HTTP client. Based on rust macros.

FeignHttp is a declarative HTTP client. Based on rust macros. Features Easy to use Asynchronous request Configurable timeout settings Suppor

null 47 Oct 8, 2022
Pretend is a macros-based declarative Rust HTTP client

pretend is a modular, Feign-inspired HTTP, client based on macros. It's goal is to decouple the definition of a REST API from it's implementation.

null 24 Aug 3, 2022
Minimal Rust HTTP client for both native and WASM

ehttp: a minimal Rust HTTP client for both native and WASM If you want to do HTTP requests and are targetting both native and web (WASM), then this is

Emil Ernerfeldt 98 Nov 27, 2022
An HTTP library for Rust

hyper A fast and correct HTTP implementation for Rust. HTTP/1 and HTTP/2 Asynchronous design Leading in performance Tested and correct Extensive produ

null 10.8k Nov 27, 2022
🐱‍👤 Drop-in HTTP replacement module for Garry's Mod

??‍?? gmsv_reqwest This module is a drop-in replacement for Garry's Mod's HTTP function, inspired by gmsv_chttp created by timschumi. The module uses

William 37 Oct 24, 2022
Multi-stream HTTP downloader using range requests

chooch - An Amazing Project Downloads files faster than wget/curl (in theory) using multiple connections. Chooch recycles the slowest connection and r

null 13 Sep 14, 2022
Pyre - A fast python HTTP server inspired by japronto written in rust.

Pyre - A fast python HTTP server inspired by japronto written in rust.

null 134 Nov 15, 2022
ratpack: a simpleton's HTTP framework (for rust-lang)

ratpack: a simpleton's HTTP framework (for rust-lang) ratpack is idealized in the simplicity of the sinatra (ruby) framework in its goal, and attempts

ZeroTier, Inc. 5 Jun 29, 2022
A backend providing a HTTP REST like interface for uploading files written in rust.

UploadServer A backend providing a HTTP REST like interface for uploading files written in rust. API Documentation License This project is licensed un

null 4 Nov 20, 2022
Wrapper around reqwest to allow for client middleware chains.

reqwest-middleware A crate implementing a wrapper around reqwest to allow for client middleware chains. Overview The reqwest-middleware client exposes

TrueLayer 109 Nov 23, 2022
xh is a friendly and fast tool for sending HTTP requests. It reimplements as much as possible of HTTPie's excellent design, with a focus on improved performance.

xh is a friendly and fast tool for sending HTTP requests. It reimplements as much as possible of HTTPie's excellent design, with a focus on improved performance

Mohamed Daahir 3.3k Dec 3, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 293 Sep 22, 2022
This is choose, a human-friendly and fast alternative to cut and (sometimes) awk

Choose This is choose, a human-friendly and fast alternative to cut and (sometimes) awk Features terse field selection syntax similar to Python's list

Ryan Geary 1.4k Nov 26, 2022
Grep with human-friendly search output

hgrep: Human-friendly GREP hgrep is a grep tool to search files with given pattern and print the matched code snippets with human-friendly syntax high

Linda_pp 346 Nov 19, 2022
A simple, human-friendly, embeddable scripting language

Mica Language reference · Rust API A simple, human-friendly scripting language, developed one feature at a time. Human-friendly syntax inspired by Rub

Mica programming language 22 Nov 17, 2022
rh: user-friendly command-line HTTP client

Rust HTTP Cli The command name in your terminal is rh. rh: user-friendly command-line HTTP client rh is a user-friendly, lightweight and performant co

null 7 Nov 23, 2022