我目前正在尝试使用urllib2和urllib2_file库启动文件上传。这是我的代码:
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()
我已将此.py文件放在我的“我的文档”目录中,并在“发送到”文件夹中放置了一个快捷方式(快捷方式URL)。
当我右键单击一个文件时,选择Send To,然后选择Aquate(我的python),它会打开命令提示符一瞬间然后关闭它。什么都没上传。
我知道可能发生了错误,因此我逐行将代码输入到CL python中。
当我运行u=urllib2.urlopen(req)
行时,我没有收到错误;
alt text http://www.aquate.us/u/55245858877937182052.jpg
相反,光标只是在该行下方的新行上开始闪烁。我等了几分钟,看看是否会发生什么事情,但它只是那样。为了让它停下来,我不得不按ctrl + break。
这个脚本有什么用?
提前致谢!
[编辑] 忘了提 - 当我在没有请求数据(文件)的情况下运行脚本时,它就像魅力一样运行。这是urllib2_file的问题吗?
[编辑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()
如果您通过命令行运行该代码就像魅力一样。
答案 0 :(得分:2)
如果您使用的是Python 2.5或更高版本,urllib2_file
既不必要也不受支持,请检查您正在使用的版本(可能还有升级版)。
如果您使用的是Python 2.3或2.4(urllib2_file
支持的唯一版本),请尝试运行the sample code并查看是否存在同样的问题。如果是这样,您的Python或urllib2_file
安装可能有问题。
修改强>
此外,您似乎没有使用urllib2_file
两种支持的POST数据格式。请尝试使用以下两行中的一个:
d = ['uploaded', open(sys.argv[1:])]
## --OR-- ##
d = {'uploaded': open(sys.argv[1:])}
答案 1 :(得分:0)
首先,还有第三种运行Python程序的方法。
从cmd.exe中,键入python myprogram.py
。你得到一个很好的日志。您不必一次只输入一行。
请求需要URL和urlencoded编码的数据缓冲区。
数据应该是一个缓冲区 标准 应用程序/ x-WWW窗体-urlencoded 格式。 urllib.urlencode() 函数采用映射或序列 2元组并返回一个字符串 这种格式。
您需要对数据进行编码。
答案 2 :(得分:0)
如果你还在使用Python2.5,对我来说有用的是在这里下载代码:
http://peerit.blogspot.com/2007/07/multipartposthandler-doesnt-work-for.html
并将其另存为MultipartPostHandler.py
然后使用:
import urllib2, MultipartPostHandler
opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler())
opener.open(url, {"file":open(...)})
或者如果你需要cookies:
import urllib2, MultipartPostHandler, cookielib
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), MultipartPostHandler.MultipartPostHandler())
opener.open(url, {"file":open(...)})