0

海我想在 python 中使用私有代理。请帮我在我当前的 Python 脚本中添加用户名、代理密码。我知道要成功运行需要添加几行代码。

data = urllib.urlencode(values) 
proxy_support = urllib2.ProxyHandler({"http": httpproxy})
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)
req = urllib2.Request(url)
response = urllib2.urlopen(req,data)
page = response.read()

提前致谢!

4

2 回答 2

0

过时了,但我找到了一个可以解决这个问题的网站。

http://code.activestate.com/recipes/523016-using-xmlrpc-with-authenticated-proxy-server/

相关代码:import base64 import urllib from urllib import unquote, splittype, splithost import xmlrpclib

class UrllibTransport(xmlrpclib.Transport):
    def set_proxy(self, proxy):
        self.proxyurl = proxy

    def request(self, host, handler, request_body, verbose=0):
        type, r_type = splittype(self.proxyurl)
        phost, XXX = splithost(r_type)

        puser_pass = None
        if '@' in phost:
            user_pass, phost = phost.split('@', 1)
            if ':' in user_pass:
                user, password = user_pass.split(':', 1)
                puser_pass = base64.encodestring('%s:%s' % (unquote(user),
                                                unquote(password))).strip()

        urlopener = urllib.FancyURLopener({'http':'http://%s'%phost})
        if not puser_pass:
            urlopener.addheaders = [('User-agent', self.user_agent)]
        else:
            urlopener.addheaders = [('User-agent', self.user_agent),
                                    ('Proxy-authorization', 'Basic ' + puser_pass) ]

        host = unquote(host)
        f = urlopener.open("http://%s%s"%(host,handler), request_body)

        self.verbose = verbose 
        return self.parse_response(f)

if __name__ == '__main__':
    proxy = "http://proxy_user:proxy_passwd@my.authenticated.proxy.server:8080"

    p = UrllibTransport()
    p.set_proxy(proxy)

它创建一个包含身份验证的 urllib2 传输类。

于 2013-11-28T17:30:20.690 回答
0

你的httpproxy变量值是多少?你试过了吗

httpproxy = 'http://username:password@proxyurl:proxyport'

顺便说一句,urrlib2无缝处理http_proxyno_proxy代理配置和代理豁免的环境变量。例如,对于 *nix 平台,以下代码应该可以工作:

export http_proxy=http://username:password@proxyurl:proxyport
于 2013-11-28T17:40:52.737 回答