[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