* Support `requests.response.raw` being a file-like object
Previously HTTPie relied on `requests.models.Response.raw` being
`urllib3.HTTPResponse`. The `requests` documentation specifies that
(requests.models.Response.raw)[https://docs.python-requests.org/en/master/api/#requests.Response.raw]
is a file-like object but allows for other types for internal use.
This change introduces graceful handling for scenarios when
`requests.models.Response.raw` is not `urllib3.HTTPResponse`. In such a scenario
HTTPie now falls back to extracting metadata from `requests.models.Response`
directly instead of direct access from protected protected members such as
`response.raw._original_response`. A side effect in this fallback procedure is
that we can no longer determine HTTP protocol version and report it as `1.1`.
This change is necessary to make it possible to implement `TransportPlugins`
without having to also needing to emulate internal behavior of `urlib3` and
`http.client`.
* Load cookies from `response.headers` instead of `response.raw._original_response.msg._headers`
`response.cookies` was not utilized as it not possible to construct original
payload from `http.cookiejar.Cookie`. Data is stored in lossy format. For example
`Cookie.secure` defaults to `False` so we cannot distinguish if `Cookie.secure` was
set to `False` or was not set at all. Same problem applies to other fields also.
* Simpler HTTP envelope data extraction
* Test cookie extraction and make cookie presentment backwards compatible
Co-authored-by: Mickaël Schoentgen <contact@tiger-222.fr>
Co-authored-by: Jakub Roztocil <jakub@roztocil.co>
* Add --raw to allow specifying the raw request body without extra processing
As an alternative to `stdin`.
Co-authored-by: Elena Lape <elapinskaite@gmail.com>
Co-authored-by: Jakub Roztocil <jakub@roztocil.co>
* Update README.rst
Co-authored-by: Jakub Roztocil <jakub@roztocil.co>
* Update README.rst
Co-authored-by: Jakub Roztocil <jakub@roztocil.co>
* Fix default HTTP method on empty data
Co-authored-by: Elena Lape <elapinskaite@gmail.com>
Co-authored-by: Jakub Roztocil <jakub@roztocil.co>
* added a test for expiring cookies
* updated tests
* set up util for extracting expired cookies from response header
* Revert "updated tests"
This reverts commit a4eb5c4498.
* Revert "Revert "updated tests""
This reverts commit d242e21bce.
* added more functionality to get-expired-cookies
* add 'clear expired cookies' from session.json files
* refactored get_expired_cookies
* fixed formatting issues
* ensured key exists in cookie_header dict
* fixed linting errors
* removed unused import
* Added tests for get_expired_cookies util
* Added additional test for get_expired_cookies
* added remove_expired_cookies method directly to sessions class
* extracted logic to clear cookies to sessions.py
* refactored utils
* added tests to check expired cookies being removed from session obj
* added type annotations for methods
* Refactored test_sessions
* Seperated out expiry related tests into own class
* Refactored get_expired_cookies in utils
* Refactored remove cookie methods
* fixed linting errors
* fixed indentation and also pluralized test class name
* removed inheritance from SessionTestbase class
* Moved related test to TestExpiredCookies class
Co-authored-by: kbanc <katherine.bancoft@gmail.com>
* Support curl-like syntax for custom MIME type for files
In order to specify a custom MIME type for file uploads, a syntax
similar to that used by cURL is used so that
http -F test_file@/path/to/file.bin;type=application/zip https://...
forwards the user-provided file type if provided, otherwise falling
back to the usual guesswork out of the file extension.
On Unix-like systems, the configuration file now lives in
$XDG_CONFIG_HOME/httpie/ by default, not ~/.httpie/ (the behaviour on
Windows is unchanged). The previous location is still checked, in order
to support existing installations.
Searching $XDG_CONFIG_DIRS is still not supported.
Fixes#145; supersedes #436.