Python urllib2 problemas de carga de archivos

Actualmente estoy intentando iniciar una carga de archivos con urllib2 y la biblioteca urllib2_file . Aquí está mi código:

import sys import urllib2_file import urllib2 URL='http://aquate.us/upload.php' d = [('uploaded', open(sys.argv[1:]))] req = urllib2.Request(URL, d) u = urllib2.urlopen(req) print u.read() 

He colocado este archivo .py en mi directorio Mis documentos y he colocado un acceso directo en mi carpeta Enviar a (la URL del acceso directo es).

Cuando hago clic con el botón derecho en un archivo, selecciono Enviar a, y selecciono Aquate (mi python), abre un indicador de comando por una fracción de segundo y luego lo cierra. Nada se sube.

Sabía que probablemente había un error, así que escribí el código en CL python, línea por línea. Cuando ejecuté la línea u=urllib2.urlopen(req) , no obtuve un error; texto alt http://sofes.miximages.com/python/55245858877937182052.jpg

en cambio, el cursor simplemente comenzó a parpadear en una nueva línea debajo de esa línea. Esperé un par de minutos para ver si pasaba algo, pero se quedó así. Para que parara, tuve que presionar ctrl + break.

¿Qué pasa con este script?

¡Gracias por adelantado!

[Editar] Olvidé mencionar: cuando ejecuté el script sin los datos de solicitud (el archivo), se ejecutó como un hechizo. ¿Es un problema con urllib2_file?

[editar 2]:

 import MultipartPostHandler, urllib2, cookielib,sys import win32clipboard as w cookies = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),MultipartPostHandler.MultipartPostHandler) params = {"uploaded" : open("c:/cfoot.js") } a=opener.open("http://www.aquate.us/upload.php", params) text = a.read() w.OpenClipboard() w.EmptyClipboard() w.SetClipboardText(text) w.CloseClipboard() 

Ese código funciona como un encanto si lo ejecutas a través de la línea de comandos.

Si está utilizando Python 2.5 o una urllib2_file más reciente, urllib2_file es innecesario y no es compatible, así que verifique qué versión está usando (y quizás actualice).

Si está utilizando Python 2.3 o 2.4 (las únicas versiones compatibles con urllib2_file ), intente ejecutar el código de ejemplo y vea si tiene el mismo problema. Si es así, es probable que haya algún problema con la instalación de Python o urllib2_file .

EDITAR:

Además, parece que no está utilizando ninguno de los dos formatos compatibles con urllib2_file para los datos de POST. Trate de usar una de las siguientes dos líneas en su lugar:

 d = ['uploaded', open(sys.argv[1:])] ## --OR-- ## d = {'uploaded': open(sys.argv[1:])} 

Primero, hay una tercera forma de ejecutar progtwigs de Python.

Desde cmd.exe, escriba python myprogram.py . Tienes un buen registro. No tienes que escribir cosas una línea a la vez.

En segundo lugar, compruebe la documentación de urrlib2 . Tendrá que mirar urllib , también.

Una solicitud requiere una URL y un búfer codificado de datos urlencoded.

los datos deben ser un búfer en el formato de aplicación estándar / x-www-form-urlencoded. La función urllib.urlencode () toma una asignación o secuencia de 2-tuplas y devuelve una cadena en este formato.

Necesitas codificar tus datos.

Si aún estás en Python2.5, lo que funcionó para mí fue descargar el código aquí:

http://peerit.blogspot.com/2007/07/multipartposthandler-doesnt-work-for.html

y guárdalo como MultipartPostHandler.py

entonces use:

 import urllib2, MultipartPostHandler opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler()) opener.open(url, {"file":open(...)}) 

o si necesita cookies:

 import urllib2, MultipartPostHandler, cookielib cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), MultipartPostHandler.MultipartPostHandler()) opener.open(url, {"file":open(...)})