Skip to content

support proxy server #70

Description

@tpoiii

I work behind a proxy server, and the urllib3.PoolManager does not automatically check the proxy environment variables.

I modified util.py/urlopen as follows and it seems to work:

  • added import os to get access to os.getenv
  • most programs look for _PROXY for the URL for the proxy, so, e.g., HTTPS_PROXY or HTTP_PROXY
  • So, I check for the protocol by splitting the URL on ':', then build the environment variable with the uppercase protocol and _PROXY
  • if a matching environment variable exists, I use that to initialize a urllib3.ProxyManager(proxy_url) in place of the PoolManager
  • otherwise, go to default non-proxy behavior using the PoolManager
    This seems to work.
    Two changes in urlopen shown below - add import os, and add code block looking at the proxy (look for # TPO comments)

def urlopen(url):
"""Wrapper to request.get() in urllib3"""

import os # TPO added for proxy env check
import sys
import urllib3
from json import load

# https://stackoverflow.com/a/2020083
def get_full_class_name(obj):
    module = obj.__class__.__module__
    if module is None or module == str.__class__.__module__:
        return obj.__class__.__name__
    return module + '.' + obj.__class__.__name__

c = " If problem persists, a contact email for the server may be listed "
c = c + "at http://hapi-server.org/servers/"
msg = '';
try:
    # code block added by TPO to manage proxy
    protocol = url.split(':')[0]
    proxy_url = os.getenv(protocol.upper()+'_PROXY')
    if proxy_url:
        http = urllib3.ProxyManager(proxy_url)
    else:
        http = urllib3.PoolManager() # original single line
    # end of code block added by TPO to manage proxy
    res = http.request('GET', url, preload_content=False, retries=2)

--snip--

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions