cliente xmlrpc via https, com cookie

Como diz o Cassiano, “cookie é coisa de browser”. É verdade, mas a aplicação onde tornei algumas chamadas xmlrpc disponíveis foi feita inicialmente para acesso pelo browser, e isso fez com que a versão xmlrpc usasse cookies para controlar a sessão ao invés das diversas outras maneiras.

Alguns servidores costumam retornar uma chave única após a função de login, e todas as chamadas subsequentes (inclusive logout) precisam passar aquela chave como argumento. É até interessante, mas eu não iria (jamais) refazer boa parte do meu serviço de web só pra isso. Então, mantive o controle de sessão por cookies, e criei uma classe de transporte para suportar tanto os cookies, como também o https.

Essa classe é bem simples e não valida o certificado, além de não usar nenhum módulo de cookie – o controle é feito de maneira totalmente manual, chega a ser até tosco. Enfim, pro meu protótipo, funciona perfeitamente (python 2.5.1).

#!/usr/bin/env python
# coding: utf-8
# 20081209 AF

import xmlrpclib

class cstransport(xmlrpclib.SafeTransport):
    def __init__(self):
        xmlrpclib.SafeTransport.__init__(self)
        self.cookie = []

    def send_host(self, connection, host):
        xmlrpclib.SafeTransport.send_host(self, connection, host)
        for cookie in self.cookie:
            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_content(h, request_body)

        code, data, headers = h.getreply()
        for k, v in headers.items():
            if k.lower() == 'set-cookie':
                self.cookie.append(v.split(';')[0])

        return self.parse_response(h.getfile())

if __name__ == '__main__':
    srv = xmlrpclib.ServerProxy('https://localhost', transport=cstransport())
    ...

Tendo esse esqueleto como referência, você pode adaptar a classe para suportar cookies de qualquer outra maneira, bem como autenticação (http auth), caso se faça necessário.

Anúncios

One Comment on “cliente xmlrpc via https, com cookie”

  1. alef disse:

    ah, esqueci de colocar… aqui tem um exemplo com proxy autenticado:
    http://code.activestate.com/recipes/523016/


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s