httpie-cli/httpie
Ilya Sukhanov 147a066dbe
Add internal support for file-like object responses to improve adapter plugin support (#1094)
* 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>
2021-07-06 21:00:06 +02:00
..
cli Fix several issues found with flake8 (#1081) 2021-06-01 14:46:58 +02:00
output Review OSError exceptions handling (#1080) 2021-05-31 10:10:41 +02:00
plugins Minor clean-up (#1078) 2021-05-29 12:06:06 +02:00
__init__.py Normalize the version (#1101) 2021-07-01 10:34:51 +02:00
__main__.py Remove an useless shebang form non-executable file (#1073) 2021-05-27 19:17:04 +02:00
client.py Add internal support for file-like object responses to improve adapter plugin support (#1094) 2021-07-06 21:00:06 +02:00
compat.py Python 2.7 support removal WIP 2019-08-29 08:53:56 +02:00
config.py Fix several issues found with flake8 (#1081) 2021-06-01 14:46:58 +02:00
context.py Use relative imports (#1057) 2021-05-05 14:13:39 +02:00
core.py Fix printing redirected prepared request in verbose mode (#1088) 2021-06-15 13:39:46 +02:00
downloads.py Review OSError exceptions handling (#1080) 2021-05-31 10:10:41 +02:00
models.py Add internal support for file-like object responses to improve adapter plugin support (#1094) 2021-07-06 21:00:06 +02:00
sessions.py Use relative imports (#1057) 2021-05-05 14:13:39 +02:00
ssl.py Request content type 2020-09-25 14:44:22 +02:00
status.py Cleanup 2019-12-02 00:58:10 +01:00
uploads.py Use relative imports (#1057) 2021-05-05 14:13:39 +02:00
utils.py Add internal support for file-like object responses to improve adapter plugin support (#1094) 2021-07-06 21:00:06 +02:00