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
  • Failing test cases while setup

    Failing test cases while setup

    Checklist

    • [x] I've searched for similar issues.
    • [x] I'm using the latest version of HTTPie.

    Minimal reproduction code and steps

    1. gh repo clone httpie/httpie (in codespaces)
    2. make install
    3. make test-cover

    Current result

    282 failed, 736 passed, 4 skipped, 3 xfailed, 1 xpassed, 352 warnings in 125.12s (0:02:05) ================================================== make: *** [Makefile:107: test] Error 1 …

    Expected result

    all test cases should pass successfully on the master branch


    Debug output

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

    $ http --debug <COMPLETE ARGUMENT LIST THAT TRIGGERS THE ERROR>
    <COMPLETE OUTPUT>
    

    Additional information, screenshots, or code examples

    image

    bug new 
    opened by nishantsikarwar 5
  • removed unnecessary multiple import statements

    removed unnecessary multiple import statements

    Found Multiple import

    in

    compat.py

    https://github.com/httpie/httpie/blob/f0563deb7f0db313c1d5cdd8d667972ced0a1e52/httpie/manager/main.py#L55

    and in

    main.py

    https://github.com/httpie/httpie/blob/f0563deb7f0db313c1d5cdd8d667972ced0a1e52/httpie/manager/compat.py#L46

    opened by nishantsikarwar 0
  • `.netrc` not read by snap

    `.netrc` not read by snap

    Minimal reproduction code and steps

    1. Install snap: snap install httpie
    2. Setup a .netrc file
    3. Try it

    .netrc

    machine api.opensuse.org
    login myusername
    password mypassword
    

    Current result

    $ http --version
    3.2.1
    $ http "https://api.opensuse.org/source/home:apritschet"
    HTTP/1.1 401 Unauthorized
    ...
    

    Also, in combination with the environment variable NETRC I keep getting a 401 response.

    Expected result

    httpie should honor the .netrc file even when used as a snap. httpie installed from the Ubuntu repos does.


    Debug output

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

    $ http --debug https://api.opensuse.org/source/home:apritschet
    HTTPie 3.2.1
    Requests 2.27.1
    Pygments 2.12.0
    Python 3.8.10 (default, Nov 14 2022, 12:59:47) 
    [GCC 9.4.0]
    /snap/httpie/369/bin/python3
    Linux 5.15.0-56-generic
    
    <Environment {'apply_warnings_filter': <function Environment.apply_warnings_filter at 0x7ff369fac670>,
     'args': Namespace(),
     'as_silent': <function Environment.as_silent at 0x7ff369fac550>,
     'colors': 256,
     'config': {'default_options': []},
     'config_dir': PosixPath('/home/andi/snap/httpie/369/.config/httpie'),
     'devnull': <property object at 0x7ff369fbdbd0>,
     'is_windows': False,
     'log_error': <function Environment.log_error at 0x7ff369fac5e0>,
     'program_name': 'http',
     'quiet': 0,
     'rich_console': <functools.cached_property object at 0x7ff36a023700>,
     'rich_error_console': <functools.cached_property object at 0x7ff369fc4850>,
     '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': [<class 'httpie_unixsocket.UnixSocketTransportPlugin'>,
                  <class 'httpie_snapdsocket.SnapdSocketTransportPlugin'>],
     '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': None,
     'data': RequestJSONDataDict(),
     'headers': <HTTPHeadersDict('User-Agent': b'HTTPie/3.2.1')>,
     'method': 'get',
     'params': <generator object MultiValueOrderedDict.items at 0x7ff369c3db30>,
     'url': 'https://api.opensuse.org/source/home:apritschet'})
    
    HTTP/1.1 401 Unauthorized
    Accept-Ranges: bytes
    Connection: Upgrade, Keep-Alive
    Content-Language: en
    Content-Type: text/html; charset=utf-8
    Date: Wed, 04 Jan 2023 12:11:44 GMT
    Keep-Alive: timeout=15, max=100
    Server: Apache
    Strict-Transport-Security: max-age=31536000
    Transfer-Encoding: chunked
    Upgrade: h2
    Vary: accept-language,accept-charset
    WWW-Authenticate: Basic realm="Use your SUSE developer account"
    ...
    

    Pardon me for not including all the HTML output.

    bug new 
    opened by crazyscientist 0
  • cookie is not being set

    cookie is not being set

    Checklist

    • [x] I've searched for similar issues.
    • [x] I'm using the latest version of HTTPie.

    Minimal reproduction code and steps

    see httpie debug output below from WSL. also repro'd on Ubuntu 22.10

    Current result

    sid cookie is not being set

    Expected result

    sid cookie should be set. it works correctly using Chrome, Firefox, curl, and Python/requests with or without a session.

    import requests
    
    base_url = 'https://gsroka-neto.oktapreview.com'
    token = '...'
    
    # Not using `session`:
    r = requests.get(base_url + '/login/sessionCookieRedirect?redirectUrl=/&token=' + token)
    sid = r.cookies.get('sid')
    print(sid)
    print(r.headers['set-cookie'])
    
    u = requests.get(base_url + '/api/v1/users/me', cookies={'sid': sid}).json()
    print(u['id'])
    

    Debug output

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

    I've redacted actual token and cookie values with XXX123.

    $ https -vv --debug --session=./cookies.json "https://gsroka-neto.oktapreview.com/login/sessionCookieRedirect?redirectUrl=/&token=token123"
    
    HTTPie 3.2.1
    Requests 2.25.1
    Pygments 2.11.2
    Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]
    /usr/bin/python3
    Linux 4.4.0-19041-Microsoft
    
    <Environment {'apply_warnings_filter': <function Environment.apply_warnings_filter at 0x7f219af4e950>,
     'args': Namespace(),
     'as_silent': <function Environment.as_silent at 0x7f219af4e830>,
     'colors': 256,
     'config': {'__meta__': {'about': 'HTTPie configuration file',
                             'help': 'https://httpie.org/doc#config',
                             'httpie': '1.0.3'},
                'default_options': []},
     'config_dir': PosixPath('/home/gabrielsroka/.httpie'),
     'devnull': <property object at 0x7f219af3a980>,
     'is_windows': False,
     'log_error': <function Environment.log_error at 0x7f219af4e8c0>,
     'program_name': 'https',
     'quiet': 0,
     'rich_console': <functools.cached_property object at 0x7f219af357e0>,
     'rich_error_console': <functools.cached_property object at 0x7f219af37310>,
     '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': None,
     'data': RequestJSONDataDict(),
     'headers': <HTTPHeadersDict('User-Agent': b'HTTPie/3.2.1')>,
     'method': 'get',
     'params': <generator object MultiValueOrderedDict.items at 0x7f219ac00f20>,
     'url': 'https://gsroka-neto.oktapreview.com/login/sessionCookieRedirect?redirectUrl=/&token=token123'})
    
    GET /login/sessionCookieRedirect?redirectUrl=/&token=token123 HTTP/1.1
    Accept: */*
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Host: gsroka-neto.oktapreview.com
    User-Agent: HTTPie/3.2.1
    
    
    
    HTTP/1.1 302 Found
    Connection: keep-alive
    Content-Length: 0
    Date: Fri, 30 Dec 2022 14:14:38 GMT
    Public-Key-Pins-Report-Only: pin-sha256="jZomPEBSDXoipA9un78hKRIeN/+U4ZteRaiX8YpWfqc="; pin-sha256="axSbM6RQ+19oXxudaOTdwXJbSr6f7AahxbDHFy3p8s8="; pin-sha256="SE4qe2vdD9tAegPwO79rMnZyhHvqj3i5g1c2HkyGUNE="; pin-sha256="ylP0lMLMvBaiHn0ihLxHjzvlPVQNoyQ+rMiaj0da/Pw="; max-age=60; report-uri="https://okta.report-uri.com/r/default/hpkp/reportOnly"  
    Server: nginx
    Strict-Transport-Security: max-age=315360000; includeSubDomains
    X-Robots-Tag: 
    cache-control: no-cache, no-store
    content-language: en
    content-security-policy: default-src 'self' gsroka-neto.oktapreview.com *.oktacdn.com; connect-src 'self' gsroka-neto.oktapreview.com gsroka-neto-admin.oktapreview.com *.oktacdn.com *.mixpanel.com *.mapbox.com app.pendo.io data.pendo.io pendo-static-5634101834153984.storage.googleapis.com pendo-static-5391521872216064.storage.googleapis.com *.mtls.oktapreview.com gsroka-neto.kerberos.oktapreview.com https://oinmanager.okta.com data:; script-src 'unsafe-inline' 'unsafe-eval' 'self' gsroka-neto.oktapreview.com *.oktacdn.com; style-src 'unsafe-inline' 'self' gsroka-neto.oktapreview.com *.oktacdn.com app.pendo.io cdn.pendo.io pendo-static-5634101834153984.storage.googleapis.com pendo-static-5391521872216064.storage.googleapis.com; frame-src 'self' gsroka-neto.oktapreview.com gsroka-neto-admin.oktapreview.com login.okta.com; img-src 'self' gsroka-neto.oktapreview.com *.oktacdn.com *.tiles.mapbox.com *.mapbox.com app.pendo.io data.pendo.io cdn.pendo.io pendo-static-5634101834153984.storage.googleapis.com pendo-static-5391521872216064.storage.googleapis.com data: blob:; font-src 'self' gsroka-neto.oktapreview.com data: *.oktacdn.com fonts.gstatic.com; frame-ancestors 'self'
    expect-ct: report-uri="https://oktaexpectct.report-uri.com/r/t/ct/reportOnly", max-age=0
    expires: 0
    location: https://gsroka-neto.oktapreview.com/
    p3p: CP="HONK"
    pragma: no-cache
    set-cookie: sid=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/, autolaunch_triggered=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/, JSESSIONID=jession123; Path=/; Secure; HttpOnly, t=summer; Path=/, DT=dt123;Version=1;Path=/;Max-Age=63072000;Secure;Expires=Sun, 29 Dec 2024 14:14:38 GMT;HttpOnly, sid=sid123; Path=/; Secure
    x-frame-options: SAMEORIGIN
    x-okta-request-id: req123
    x-rate-limit-limit: 850
    x-rate-limit-remaining: 849
    x-rate-limit-reset: 1672409738
    x-xss-protection: 0
    

    Additional information, screenshots, or code examples

    note that the sid cookie appears twice in the set-cookie header: once at the beginning to clear it, once at the end to set it. i'm not sure if this is related.

    i guess these are technically 2 set-cookie headers, but they're all joined with a ,, whereas curl, etc, show them as separate headers -- which is useful for debugging. is there a way to show these separately using httpie?

    Edit:

    https://www.rfc-editor.org/rfc/rfc6265

    User agents MUST implement the more liberal processing rules defined in Section 5, in order to maximize interoperability with existing servers that do not conform to the well-behaved profile defined in Section 4.

    Origin servers SHOULD NOT fold multiple Set-Cookie header fields into a single header field. The usual mechanism for folding HTTP headers fields (i.e., as defined in [RFC2616]) might change the semantics of the Set-Cookie header field because the %x2C (",") character is used by Set-Cookie in a way that conflicts with such folding.

    bug new 
    opened by gabrielsroka 0
  • Report a possible bug in httpie step for closer a long time.

    Report a possible bug in httpie step for closer a long time.

    Checklist

    • [x] I've searched for similar issues.
    • [x] I'm using the latest version of HTTPie.

    Minimal reproduction code and steps

    Current result

    Expected result


    Debug output

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

    $ http --debug <COMPLETE ARGUMENT LIST THAT TRIGGERS THE ERROR>
    <COMPLETE OUTPUT>
    

    Additional information, screenshots, or code examples

    … Kill, kill, and execute. I find, I do, let me see my work.

    bug new 
    opened by Masterkenshin 0
  • Failing tests with responses ≥ 0.22.0

    Failing tests with responses ≥ 0.22.0

    Checklist

    • [x] I've searched for similar issues.
    • [x] I'm using the latest version of HTTPie.

    Minimal reproduction code and steps

    1. git clone https://github.com/httpie/httpie; cd httpie
    2. pip install 'responses>=0.22.0' .[test]
    3. pytest

    Current result

    A multitude of failures in tests/test_encoding.py, tests/test_json.py, etc. in the vein of https://hydra.nixos.org/build/202035507: KeyError: 0 on httpie/models.py line 82.

    Expected result

    A passing test suite.


    Additional information, screenshots, or code examples

    I wrote some of this up in https://github.com/NixOS/nixpkgs/pull/205270#issuecomment-1361147904, but the problem is not NixOS-specific. The short version is that before https://github.com/getsentry/responses/pull/585, the reference to httpie.models.HTTPResponse()._orig.raw._original_response.version in the implementation of httpie.models.HTTPResponse.headers found the then-extant responses.OriginalResponseShim object, which does not have a version attribute, and therefore successfully defaulted to 11, whereas now that that class has been removed it finds a urllib3.HTTPResponse object instead, which defaults to version=0, and it’s not prepared to handle that.

    Given the amount of groveling into internal data structures that goes on here (I don’t think requests even documents Request.raw as being a urllib3.HTTPResponse object), I’m not sure if this is a bug in the httpie test suite or a regression in responses, so I’m filing it here for you to decide.

    For reference, the following change makes the tests pass for me:

    diff --git a/httpie/models.py b/httpie/models.py
    index d97b55e..a3ec6e7 100644
    --- a/httpie/models.py
    +++ b/httpie/models.py
    @@ -77,6 +77,8 @@ class HTTPResponse(HTTPMessage):
                 else:
                     raw_version = raw.version
             except AttributeError:
    +            raw_version = 0
    +        if not raw_version:
                 # Assume HTTP/1.1
                 raw_version = 11
             version = {
    
    bug new 
    opened by alexshpilkin 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 (:=/:=@). (#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 8 Nov 30, 2022
A more modern http framework benchmarker supporting HTTP/1 and HTTP/2 benchmarks.

rewrk A more modern http framework benchmark utility.

Harrison Burt 273 Dec 27, 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 4.1k Jan 2, 2023
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.8k Dec 31, 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 46 Nov 30, 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 105 Dec 25, 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 11k Jan 8, 2023
🐱‍👤 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 38 Dec 12, 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 135 Nov 26, 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 113 Dec 7, 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.4k Jan 6, 2023
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 294 Dec 23, 2022
An experimental HTTP server in Rust that supports HTTP/1.1, HTTP/2, and HTTP/3 over QUIC.

?? H123 An experimental HTTP server in Rust that supports HTTP/1.1, HTTP/2, and HTTP/3 over QUIC. Warning This is an experimental project and not inte

Naoki Ikeguchi 7 Dec 15, 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 Jan 7, 2023
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 345 Jan 4, 2023
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 32 Dec 30, 2022