2013-07-14 47 views
0

Hai我想在Python中使用私有代理服務器。請幫助我在當前的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() 

在此先感謝!

回答

0

已過時,但我找到了可以解決此問題的網站。

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

的培訓相關的代碼: 進口的base64 進口的urllib 從進口的urllib引文結束,分體式,splithost 進口的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:[email protected]:8080" 

    p = UrllibTransport() 
    p.set_proxy(proxy) 

它創建的urllib2運輸類,包含驗證。

+0

這個rec​​iepe用於'urrlib',而不是'urrlib2',它更加實用。在'urrlib2'中,你不必手工實現'user-agent'和東西處理。我現在知道'urllib'用法的唯一原因是urllib.urlencode,在'urllib2'中未被使用 – alko

0

什麼是您的httpproxy變量的值?你有沒有嘗試

httpproxy = 'http://username:[email protected]:proxyport' 

順便說一句,urrlib2無縫handles http_proxy環境變量代理配置和no_proxy爲代理豁免。例如* nix平臺下面的代碼應該可以工作:

export http_proxy=http://username:[email protected]:proxyport 
相關問題