¿El archivo de Python se envía de manera correcta? (urllib2, PyCurl).

¡Hola! Mi problema es que Python envía a un controlador que funciona con un script de envío html preparado. Aquí el problema es que la carga no se realiza correctamente (ni siquiera comienza a cargarse) aunque el script se ejecuta. El archivo es un archivo contenedor binario. El problema debería estar en el código, porque de otra manera podría completarse la carga.

Aquí la salida:

09:54:40:11     ...STEP: Upload Firmware
09:54:49:63     ...Upload was successful!
09:54:49:64     ...POST resource
09:54:50:60     ...Response: {"uploadFirmwareAck":0}

Entonces, la carga "se completó", dice dentro de los 9 segundos, pero debería tomar alrededor de 5 minutos. Con el depurador, supervisé que no comenzara, simplemente salte sobre él y muestre el mensaje "La carga se realizó correctamente". No tengo ni idea de por qué. ¿Algunas ideas?

El código:

import pycurl  
from cStringIO import StringIO
import urllib2
import simplejson as json

url = 'http://eData/pvi?rName=FirmwareUpload'
req = urllib2.Request(url)
req.add_header('Content-Type','application/json')

c = pycurl.Curl()
c.setopt(c.POST, 1)
c.setopt(c.URL, url)
c.setopt(c.CONNECTTIMEOUT,0)
c.setopt(c.TIMEOUT, 0)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.NOSIGNAL, 1)

c.setopt(c.HTTPPOST, [("file1", (c.FORM_FILE, "c:\\Users\\dem2bp\\Desktop\\HMI_Firmware update materials\\output_38.efc"))])

c.perform()
print "Upload was successful!"
print "Tx JSON:"
print "POST resource"
res = urllib2.urlopen(req)
print "Response:"
str_0 = res.read()

print str_0
c.close()

preguntado el 02 de diciembre de 13 a las 08:12

2 Respuestas

De la documentación:

PycURL está dirigido a un desarrollador avanzado: si necesita docenas de conexiones simultáneas, rápidas y confiables o cualquiera de las características sofisticadas enumeradas anteriormente, PycURL es para usted.

Le daría http://www.python-requests.org/en/latest/ un intento. Para mí, siempre es la primera opción cuando hago cosas de http. Por lo general, solo hace lo que se supone que debe hacer en unas pocas líneas de código.

Respondido el 02 de diciembre de 13 a las 09:12

Vale, me gusta subir un archivo binario, relativamente grande. Escuché que no hay mucho apoyo de urllib2 para hacer eso. La solicitud de python falla debido a 2.5 python, por lo que alguien podría tener una idea de cuál podría ser el problema. - user3056505

Gracias, pero como veo, esta biblioteca de solicitudes no se ejecuta con una versión anterior de Python como 2.6. Creo que sería demasiado arriesgado actualizar. ¿Tienes otra idea? Cuando importo la biblioteca de solicitudes en algún punto de la biblioteca que requiere versiones posteriores, me arrojan errores de sintaxis.

Respondido el 05 de diciembre de 13 a las 09:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.