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>