zenwalker
5/22/2013 - 7:25 AM

CookieTransport for xmlrpclib

CookieTransport for xmlrpclib

import xmlrpclib


def xmlrpc(url):
    api = xmlrpclib.Server(url, transport=CookieTransport())
    return api


class CookieTransport(xmlrpclib.Transport):
    cookies = []

    def send_cookies(self, connection):
        if self.cookies:
            for cookie in self.cookies:
                connection.putheader("Cookie", cookie)

    def request(self, host, handler, request_body, verbose=0):
        self.verbose = verbose
        h = self.make_connection(host)

        self.send_request(h, handler, request_body)
        self.send_host(h, host)
        self.send_cookies(h)
        self.send_user_agent(h)
        self.send_content(h, request_body)

        response = h.getresponse()

        for header in response.msg.getallmatchingheaders("Set-Cookie"):
            val = header.split(": ", 1)[1]
            cookie = val.split(";", 1)[0]
            self.cookies.append(cookie)

        return self.parse_response(response)