Hola a todos, qué tál!!! :)
Les comento, quiero crear un programa para subir imágenes, digamos que el programa funciona casi perfectamente, pero sucede un error inesperado y lamentablemente no me deja seguir.
Una vez que logre crear el código para subir imágenes a un servidor web, voy a seguir con la parte gráfica.
Se que me van a ayudar con mi problema ya que este es un gran foro y hay mucha gente con conocimientos muy elevados.
El programa que quiero crear, va a subir imágenes a la web www.subeimagenes.com, el código que he encontrado por las webs me sirve perfectamente, utiliza la librería requests y todo de maravillas, comento que antes estaba usando la librería httplib2, pero no sé porqué razón cuando pobré una imagen un poco más grande de tamaño y peso, me salió un error que decía "missing group name", sin embargo cuando hice las pruebas con una imagen más pequeña, pudo subirla perfectamente... Igual no es importante esto ya que requests hace todo lo que hacía con httplib2 con tan solo 2 líneas.
Ahora... que es lo que falla? o cuál es el problema?...
Bueno, si bien requests es excelente, pero el problema se originia cuando subo varias imágenes a la vez, llega un momento que luego de subir varias imágenes, la consola del programa se queda tildada, cuando miro la luz del adaptador USB del wifi veo que la luz está fija, por lo tanto no está enviando ni recibiendo bytes, así que algo está pasando... Digo que se queda tildada, porque no puedo hacer nada, por más que he utilizado excepciones propias de requests, lo mismo el programa se queda ahí estancado, es decir que no lanza ninguna excepción por algún posible error que pueda haber pasado y tengo que cerrar la consola.
Utilicé varias veces un programa para saber los puertos abiertos que tengo en mi pc y que programas son los que han abierto esos puertos y a qué IPs/Hosts están conectados, etc., y logro ver que la conexión a la web subeimagenes sigue establecida, cláro porque requests al enviar la petición POST seguro está usando Keep-Alive, por eso se queda con la conexión abierta.
Y esto es un problema para mí... ya que al no cerrar la conexión, se queda abierta y eso produce que el programa no avance a subir las demás imágenes cuando está en pleno bucle for.
Uso Firefox para tratar de ver todo lo que más puedo y entiendo.
Haciendo pruebas, leyendo y tratando de ver porque sucede esto... he visto que la web te inserta 4 cookies cuando entras al index, yo cuando subo las imágenes, no ingreso al index, simplemente envío las peticiones POST y las imágenes se suben perfectamente, la misma librería requests al recibir el código de estado 302, automáticamente se redirije a la nueva URL que la misma web le indicó, es decir a la URL donde está la imagen que el programa acaba de subir.
El problema surje cuando subo varias imágenes, pasa lo que comenté, por ejemplo supongamos que envío 5 imágenes, el código envía 3, y en la tercera imagen, se queda ahí....
Y si voy al index de la web de subeimagenes, logro ver que la imagen si se ha subido correctamente, por lo tanto el problema no es que no envía la imagen, si la envía perfectamente, el problema es que al no enviar los cookies necesarios, llega un momento que el servidor web me los solicita y ahí viene el problema, como el servidor web no está recibiendo los cookies necesarios, entónces se niega a enviarme los demás datos, ya que para el servidor sería una petición incompleta.
Entónces, la web utiliza 4 cookies que se insertan cuando entras al index y luego se insertan 2 cookies más cuando subís una imagen, uno no es importante.. ya que ese es para otra cosa (para los usuarios en línea que tiene la web), pero el otro si debe ser importante, ya que es un cookie Sesión.
El problema no es envíar los cookies necesarios a la web, el problema es poder sacarlos, he probado con varios códigos y no los guarda! (se entiende.... en una variable o lista, etc, no los guarda) porque no los detecta...
Yo he probado con varios códigos que he visto en varias webs y no me han funcionado, el código no logra extraer esos cookies, uno es de sesión y me imagino que ese cookie debe ser el que no está siendo enviado cuando se hace la petición POST y al no ser enviado, llega un momento que la web me lo pide y al no enviarlo (porque no puedo extraerlo), la web se queda esperando me imagino ese dato y bueno se queda tildado el programa porque no puede avanzar, debido a que la web no responde.
He usado timeout, pero éste me falla, porque por más que envía las peticiones POST perfectamente, lo mismo me indica que hay un error de timeout, cosa que no es cierta, ya que no hay problema alguno en eso.
Quisiera que me digan que puedo hacer en este caso... lo veo bastante difícil, porque he usado códigos para poder sacar los cookies y nos los detecta!!!! y debe ser porque los mismos se crean con la ayuda de Javascript, si fuese que los cookies se crean con js, más difícil va a ser poder sacarlos.
Por favor necesito ayuda, que puedo hacer con este problema que tengo? Ustedes creen que el problema de que el programa no avanza, es porque el servidor no está respondiendo? o qué creen ustedes que puede ser lo que está causando que luego de subir varias imágenes o luego de un determinado tiempo, el código en python no pueda avanzar debido a que el servidor de esa página no me responde a la solicitud POST y logicamente no puedo continuar.
Quiero hacer el proyecto y no puedo!!!
En resumen y para finalizar... ¿cuál es el problema y cómo puedo solucionarlo?, ¿la web de www.subeimagenes.com requiere los cookies o no?, ¿cómo logro sacar el cookie de sesión?, he intentado sacar el cookie de sesión y tampoco lo encuenta
El código que estoy usando ahora es este:
El codigo lo he eliminado porque parece que estan atentando masivamente a la web en la que nombro en este Tema, he visto muchas imagenes iguales con palabras muy desagradables, asi que por seguridad elimino el codigo.
Gracias igualmente.
r.content si me funciona, pero r.cookies no, ni siquiera usando un código con petición GET cuando entro al index.
Dejo una captura de Firebug para que puedan ver los cookies que usa esa web:
Desde ya muchas gracias a la persona que me pueda ayudar.