Annotation of VSyncer/xmlrpclibBasicAuth.py, revision 1.1
1.1 ! casties 1: # Thanks Amos and Chris at DC
! 2: # http://www.zope.org/Members/Amos/XML-RPC
! 3:
! 4: # path to xmlrpclib, works fine in Zope but when running from the command line
! 5: # seems to fail. Annoying.
! 6: # import sys
! 7: # sys.path.insert(0, r'd:\XMLTest1\lib\python')
! 8:
! 9: import string, xmlrpclib, httplib
! 10: from base64 import encodestring
! 11:
! 12: def Server(url, username, password):
! 13: t = BasicAuthTransport(username, password)
! 14: return xmlrpclib.Server(url, t)
! 15:
! 16: class BasicAuthTransport(xmlrpclib.Transport):
! 17: def __init__(self, username=None, password=None):
! 18: self.username = username
! 19: self.password = password
! 20: self.verbose = None
! 21: self.has_ssl = httplib.__dict__.has_key("HTTPConnection")
! 22:
! 23: def request(self, host, handler, request_body, verbose=None):
! 24: # issue XML-RPC request
! 25: if self.has_ssl:
! 26: if host.startswith("https:"): h = httplib.HTTPSConnection(host)
! 27: else: h = httplib.HTTPConnection(host)
! 28: else: h = httplib.HTTP(host)
! 29:
! 30: h.putrequest("POST", handler)
! 31:
! 32: # required by HTTP/1.1
! 33: if not self.has_ssl: # HTTPConnection already does 1.1
! 34: h.putheader("Host", host)
! 35: h.putheader("Connection", "close")
! 36:
! 37: # required by XML-RPC
! 38: h.putheader("User-Agent", self.user_agent)
! 39: h.putheader("Content-Type", "text/xml")
! 40: h.putheader("Content-Length", str(len(request_body)))
! 41:
! 42: # basic auth
! 43: if self.username is not None and self.password is not None:
! 44: h.putheader("AUTHORIZATION", "Basic %s" % string.replace(
! 45: encodestring("%s:%s" % (self.username, self.password)),
! 46: "\012", ""))
! 47: h.endheaders()
! 48:
! 49: if request_body: h.send(request_body)
! 50: if self.has_ssl:
! 51: response = h.getresponse()
! 52: if response.status != 200:
! 53: raise xmlrpclib.ProtocolError(host + handler,
! 54: response.status,
! 55: response.reason,
! 56: response.msg)
! 57: file = response.fp
! 58: else:
! 59: errcode, errmsg, headers = h.getreply()
! 60: if errcode != 200:
! 61: raise xmlrpclib.ProtocolError(host + handler, errcode, errmsg, headers)
! 62:
! 63: file = h.getfile()
! 64:
! 65: return self.parse_response(file)
! 66:
! 67: if __name__=='__main__':
! 68: pass
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>