¿El archivo de Python se envía de manera correcta? (urllib2, PyCurl).
Frecuentes
Visto 217 veces
1
¡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()
2 Respuestas
0
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
0
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 python urllib2 pycurl or haz tu propia pregunta.
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