diff --git a/httpie/sessions.py b/httpie/sessions.py index 5a4acef8..cc54def6 100644 --- a/httpie/sessions.py +++ b/httpie/sessions.py @@ -77,7 +77,9 @@ class Session(BaseConfigDict): if value is None: continue # Ignore explicitly unset headers - value = value.decode('utf8') + if type(value) is not str: + value = value.decode('utf8') + if name.lower() == 'user-agent' and value.startswith('HTTPie/'): continue diff --git a/tests/test_sessions.py b/tests/test_sessions.py index 4fbc0031..ea22a1ad 100644 --- a/tests/test_sessions.py +++ b/tests/test_sessions.py @@ -16,6 +16,7 @@ from httpie.sessions import Session from httpie.utils import get_expired_cookies from tests.test_auth_plugins import basic_auth from utils import HTTP_OK, MockEnvironment, http, mk_config_dir +from fixtures import FILE_PATH_ARG class SessionTestBase: @@ -161,6 +162,12 @@ class TestSession(SessionTestBase): assert 'Content-Type' not in r2.json['headers'] assert 'If-Unmodified-Since' not in r2.json['headers'] + def test_session_with_upload(self, httpbin): + self.start_session(httpbin) + r = http('--session=test', '--form', '--verbose', 'POST', httpbin.url + '/post', + f'test-file@{FILE_PATH_ARG}', 'foo=bar', env=self.env()) + assert HTTP_OK in r + def test_session_by_path(self, httpbin): self.start_session(httpbin) session_path = self.config_dir / 'session-by-path.json'