[Python-es] problema con urllib2, sólo la primera conexión con el "server" funciona

Jose Caballero jcaballero.hep en gmail.com
Vie Ene 21 21:18:23 CET 2011


Hola,

necesito enviar ciertos datos a un servidor mediante el método POST, y
analizar la respuesta que el servidor me devuelve.
Este proceso se realiza varias veces, pasando distinta información en cada
comunicación.

La comunicación se debe autenticar mediante un certificado PEM.

Lo estoy intentando con urllib/urllib2, con un código más o menos como el
siguiente (parte copiado de un blog que encontré en google):

------------------------------------------------------------------------------------------------------------------------------

import urllib
import urllib2
import httplib


def connect(url, data):

        class HTTPSClientAuthHandler(urllib2.HTTPSHandler):
            def __init__(self, key, cert):
                urllib2.HTTPSHandler.__init__(self)
                self.key = key
                self.cert = cert

            def https_open(self, req):
                # Rather than pass in a reference to a connection class, we
pass in
                # a reference to a function which, for all intents and
purposes,
                # will behave as a constructor
                return self.do_open(self.getConnection, req)

            def getConnection(self, host, timeout=300):
                return httplib.HTTPSConnection(host, key_file=self.key,
cert_file=self.cert)

        opener =
urllib2.build_opener(HTTPSClientAuthHandler('/tmp/pem_certificate',
'/tmp/pem_certificate') )
        urllib2.install_opener(opener)
        urlhandler =  urllib2.urlopen(url, urllib.urlencode(data))
        ret = urlhandler.read()

        return ret


ret1 = connect(url, data1)
print ret1

ret2 = connect(url, data2)
print ret2

ret3 = connect(url, data3)
print ret3

------------------------------------------------------------------------------------------------------------------------------

Mi problema es que sólo la primera conexión funciona.
Para la segunda y la tercera el servidor me devuelve un mensaje de error.
Este mensaje, algo críptico, viene a decir que estoy estableciendo una
comunicación sin autenticar.
Sin embargo, el fichero PEM sigue ahí, uso el mismo para las tres
conexiones.
¿Por qué funciona la primera vez y no las demás?
Nota: no tengo acceso a los logs del servidor. Sólo sé lo que me devuelve
como mensaje de error.

Lo único que se me ocurre es algún problema de conexiones abiertas que
deberían haber sido cerradas o algo similar.

Si alguien me puede dar alguna pista estaré eternamente agradecido.


Muchas gracias por adelantando.
Jose
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110121/af4213eb/attachment.html>


Más información sobre la lista de distribución Python-es