代码之家  ›  专栏  ›  技术社区  ›  Rehan

如何为PythonHTTP连接指定经过身份验证的代理?

  •  48
  • Rehan  · 技术社区  · 16 年前

    在python中,使用用户名和密码为http连接指定代理的最佳方法是什么?

    6 回复  |  直到 6 年前
        1
  •  6
  •   alexandrul    6 年前

    使用此:

    import requests
    
    proxies = {"http":"http://username:password@proxy_ip:proxy_port"}
    
    r = requests.get("http://www.example.com/", proxies=proxies)
    
    print(r.content)
    

    我觉得它比使用简单多了 urllib . 我不明白为什么人们喜欢使用 乌尔利布 这么多。

        2
  •  57
  •   HongboZhu    11 年前

    这对我很有用:

    import urllib2
    
    proxy = urllib2.ProxyHandler({'http': 'http://
    username:password@proxyurl:proxyport'})
    auth = urllib2.HTTPBasicAuthHandler()
    opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
    urllib2.install_opener(opener)
    
    conn = urllib2.urlopen('http://python.org')
    return_str = conn.read()
    
        3
  •  15
  •   ducu    14 年前

    设置名为的环境变量 HTTP代理 这样地: http://username:password@proxy_url:port

        4
  •  9
  •   gz.    16 年前

    通过需要身份验证的代理的最佳方法是使用 urllib2 要构建一个自定义的URL开放器,然后使用它来生成您想要通过代理的所有请求。特别要注意的是,您可能不想在URL或Python源代码中嵌入代理密码(除非它只是一个快速的黑客攻击)。

    import urllib2
    
    def get_proxy_opener(proxyurl, proxyuser, proxypass, proxyscheme="http"):
        password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
        password_mgr.add_password(None, proxyurl, proxyuser, proxypass)
    
        proxy_handler = urllib2.ProxyHandler({proxyscheme: proxyurl})
        proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr)
    
        return urllib2.build_opener(proxy_handler, proxy_auth_handler)
    
    if __name__ == "__main__":
        import sys
        if len(sys.argv) > 4:
            url_opener = get_proxy_opener(*sys.argv[1:4])
            for url in sys.argv[4:]:
                print url_opener.open(url).headers
        else:
            print "Usage:", sys.argv[0], "proxy user pass fetchurls..."
    

    在更复杂的程序中,您可以根据需要将这些组件分离出来(例如,在应用程序的生命周期中只使用一个密码管理器)。python文档 more examples on how to do complex things with urllib2 你可能也会觉得有用。

        5
  •  3
  •   iChux    9 年前

    或者,如果您想安装它,以便它总是与urllib2.urlopen一起使用(这样您就不需要保留对周围开放器的引用):

    import urllib2
    url = 'www.proxyurl.com'
    username = 'user'
    password = 'pass'
    password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
    # None, with the "WithDefaultRealm" password manager means
    # that the user/pass will be used for any realm (where
    # there isn't a more specific match).
    password_mgr.add_password(None, url, username, password)
    auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
    opener = urllib2.build_opener(auth_handler)
    urllib2.install_opener(opener)
    print urllib2.urlopen("http://www.example.com/folder/page.html").read()
    
        6
  •  2
  •   daz    8 年前

    这是使用Urllib的方法

    import urllib.request
    
    # set up authentication info
    authinfo = urllib.request.HTTPBasicAuthHandler()
    proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"})
    
    # build a new opener that adds authentication and caching FTP handlers
    opener = urllib.request.build_opener(proxy_support, authinfo,
                                         urllib.request.CacheFTPHandler)
    
    # install it
    urllib.request.install_opener(opener)
    
    f = urllib.request.urlopen('http://www.python.org/')
    """