已過時,但我找到了可以解決此問題的網站。
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運輸類,包含驗證。
這個reciepe用於'urrlib',而不是'urrlib2',它更加實用。在'urrlib2'中,你不必手工實現'user-agent'和東西處理。我現在知道'urllib'用法的唯一原因是urllib.urlencode,在'urllib2'中未被使用 – alko