httpie/cli

HTTPS_PROXY not working

Closed this issue · 1 comments

Checklist

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

Minimal reproduction code and steps

1.export HTTPS_PROXY="https://username:password@my.proxy.example.com"
2. http http://httpbin.org
3. error

Current result

http: error: ProxyError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /ip (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 426 Upgrade Required'))) while doing a GET request to URL: https://httpbin.org/ip

Expected result

The request should work

Debug output

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

$ HTTPS_PROXY="https://username:password@my.proxy.example.com" http --debug https://httpbin.org/ip

HTTPie 3.2.2
Requests 2.31.0
Pygments 2.16.1
Python 3.11.6 (main, Oct  2 2023, 13:45:54) [GCC 11.4.0]
/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/bin/python3.11
Linux 6.2.0-37-generic

<Environment {'apply_warnings_filter': <function Environment.apply_warnings_filter at 0x7f38e07a2480>,
 'args': Namespace(),
 'as_silent': <function Environment.as_silent at 0x7f38e07a2340>,
 'colors': 8,
 'config': {'default_options': []},
 'config_dir': PosixPath('/home/hbagdi/.config/httpie'),
 'devnull': <property object at 0x7f38e07ac130>,
 'is_windows': False,
 'log_error': <function Environment.log_error at 0x7f38e07a23e0>,
 'program_name': 'http',
 'quiet': 0,
 'rich_console': <functools.cached_property object at 0x7f38e07a6cd0>,
 'rich_error_console': <functools.cached_property object at 0x7f38e07a7350>,
 'show_displays': True,
 'stderr': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>,
 'stderr_isatty': False,
 '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'>],
 '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.2')>,
 'method': 'get',
 'params': <generator object MultiValueOrderedDict.items at 0x7f38e0310540>,
 'url': 'https://httpbin.org/ip'})


http: error: ProxyError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /ip (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 426 Upgrade Required'))) while doing a GET request to URL: https://httpbin.org/ip


Traceback (most recent call last):
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/urllib3/connectionpool.py", line 700, in urlopen
    self._prepare_proxy(conn)
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/urllib3/connectionpool.py", line 994, in _prepare_proxy
    conn.connect()
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/urllib3/connection.py", line 369, in connect
    self._tunnel()
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/http/client.py", line 926, in _tunnel
    raise OSError(f"Tunnel connection failed: {code} {message.strip()}")
OSError: Tunnel connection failed: 426 Upgrade Required

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/requests/adapters.py", line 486, in send
    resp = conn.urlopen(
           ^^^^^^^^^^^^^
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/urllib3/connectionpool.py", line 785, in urlopen
    retries = retries.increment(
              ^^^^^^^^^^^^^^^^^^
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/urllib3/util/retry.py", line 592, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /ip (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 426 Upgrade Required')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/hbagdi/.linuxbrew/Homebrew/bin/http", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/httpie/__main__.py", line 9, in main
    exit_status = main()
                  ^^^^^^
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/httpie/core.py", line 162, in main
    return raw_main(
           ^^^^^^^^^
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/httpie/core.py", line 136, in raw_main
    handle_generic_error(propagated_exc, annotation=annotation)
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/httpie/core.py", line 100, in raw_main
    exit_status = main_program(
                  ^^^^^^^^^^^^^
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/httpie/core.py", line 213, in program
    for message in messages:
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/httpie/client.py", line 113, in collect_messages
    response = requests_session.send(
               ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hbagdi/.linuxbrew/Homebrew/opt/python@3.11/lib/python3.11/site-packages/requests/adapters.py", line 513, in send
    raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /ip (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 426 Upgrade Required')))

Additional information, screenshots, or code examples

The connection to the proxy itself must be HTTPS - this is non-negotiable.
When HTTP_PROXY is set (where the connection to the proxy is HTTPS), I can use proxy with non-HTTPS traffic (http http://httpbin.org).

The issue mentioned here is most likely due to an error on either the proxy or the client configuration.
Tunnel connection failed: 426 Upgrade Required is a clear hint toward steps that should be taken.