Python urllib2 file upload problems


I'm currently trying to initiate a file upload with urllib2 and the urllib2_file library. Here's my code:

import sys
import urllib2_file
import urllib2

d = [('uploaded', open(sys.argv[1:]))]
req = urllib2.Request(URL, d)
u = urllib2.urlopen(req)

I've placed this .py file in my My Documents directory and placed a shortcut to it in my Send To folder (the shortcut URL is ).

When I right click a file, choose Send To, and select Aquate (my python), it opens a command prompt for a split second and then closes it. Nothing gets uploaded.

I knew there was probably an error going on so I typed the code into CL python, line by line.
When I ran the u=urllib2.urlopen(req) line, I didn't get an error;
alt text

instead, the cursor simply started blinking on a new line beneath that line. I waited a couple of minutes to see if something would happen but it just stayed like that. To get it to stop, I had to press ctrl+break.

What's up with this script?

Thanks in advance!

Forgot to mention — when I ran the script without the request data (the file) it ran like a charm. Is it a problem with urllib2_file?

[edit 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") }"", params)
text =

That code works like a charm if you run it through the command line.

Best Solution

If you're using Python 2.5 or newer, urllib2_file is both unnecessary and unsupported, so check which version you're using (and perhaps upgrade).

If you're using Python 2.3 or 2.4 (the only versions supported by urllib2_file), try running the sample code and see if you have the same problem. If so, there is likely something wrong either with your Python or urllib2_file installation.


Also, you don't seem to be using either of urllib2_file's two supported formats for POST data. Try using one of the following two lines instead:

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