Setting proxy to urllib.request (Python3)

后端 未结 4 1386
攒了一身酷
攒了一身酷 2021-01-02 09:05

How can I set proxy for the last urllib in Python 3. I am doing the next

from urllib import request as urlrequest
ask = urlrequest.Request(url)          


        
相关标签:
4条回答
  • 2021-01-02 09:49

    I needed to disable the proxy in our company environment, because I wanted to access a server on localhost. I could not disable the proxy server with the approach from @mhawke (tried to pass {}, None and [] as proxies).

    This worked for me (can also be used for setting a specific proxy, see comment in code).

    import urllib.request as request
    
    # disable proxy by passing an empty
    proxy_handler = request.ProxyHandler({})
    # alertnatively you could set a proxy for http with
    # proxy_handler = request.ProxyHandler({'http': 'http://www.example.com:3128/'})
    
    opener = request.build_opener(proxy_handler)
    
    url = 'http://www.example.org'
    
    # open the website with the opener
    req = opener.open(url)
    data = req.read().decode('utf8')
    print(data)
    
    0 讨论(0)
  • 2021-01-02 09:51

    Urllib will automatically detect proxies set up in the environment - so one can just set the HTTP_PROXY variable either in your environment e.g. for Bash:

    export HTTP_PROXY=http://proxy_url:proxy_port
    

    or using Python e.g.

    import os
    os.environ['HTTP_PROXY'] = 'http://proxy_url:proxy_port'
    
    0 讨论(0)
  • 2021-01-02 09:58

    You should be calling set_proxy() on an instance of class Request, not on the class itself:

    from urllib import request as urlrequest
    
    proxy_host = 'localhost:1234'    # host and port of your proxy
    url = 'http://www.httpbin.org/ip'
    
    req = urlrequest.Request(url)
    req.set_proxy(proxy_host, 'http')
    
    response = urlrequest.urlopen(req)
    print(response.read().decode('utf8'))
    
    0 讨论(0)
  • 2021-01-02 10:02

    I normally use the following code for proxy requests:

    import requests
    proxies = {
        'http': 'http://proxy.server:port',
        'https': 'http://proxyserver:port',
    }
    s = requests.Session()
    s.proxies = proxies
    r = s.get('https://api.ipify.org?format=json').json()
    print(r['ip'])
    
    0 讨论(0)
提交回复
热议问题