English 中文(简体)
Python urllib2文件上传问题
原标题:
  • 时间:2009-01-02 17:23:55
  •  标签:

我目前正在尝试使用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文件放在我的“我的文档”目录中,并在我的Send To文件夹中放置了一个快捷方式(快捷方式URL为 )。

当我右键单击一个文件,选择发送到,然后选择Aquate(我的Python),它会打开一个命令提示符,然后立即关闭。没有上传任何内容。

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 http://www.aquate.us/u/55245858877937182052.jpg

相反,光标只是在该行下面的新行上开始闪烁。我等了几分钟看看是否会发生什么事情,但它就是保持那样。要让它停止,我不得不按下Ctrl + Break键。

这个剧本怎么了?

提前感谢!

[Edit] 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?

将此翻译成中文:[编辑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()

如果你通过命令行运行这段代码,它会像魔法一样奇妙运行。

问题回答

如果您正在使用Python 2.5或更新版本,则urllib2_file既不必要也不受支持,请检查您正在使用的版本(并可能升级)。

如果您使用的是Python 2.3或2.4(urllib2_file支持的唯一版本),请尝试运行示例代码,看看是否有相同的问题。如果是这样,那么您的Python或urllib2_file安装可能出了问题。

编辑:

此外,您似乎没有使用urllib2_file支持的两种POST数据格式之一。请尝试使用以下两行之一

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

首先,有第三种方式运行Python程序。

从cmd.exe中,键入python myprogram.py。您将获得一个不错的日志记录。您不必逐行输入东西。

第二步,查看urllib2文档。您还需要查看urllib

一个请求需要一个URL和一个urlencoded编码的数据缓冲区。

data should be a buffer in the standard application/x-www-form-urlencoded format. The urllib.urlencode() function takes a mapping or sequence of 2-tuples and returns a string in this format.

你需要对你的数据进行编码。

如果您仍在使用Python2.5,对我有用的方法是在这里下载代码:

请翻译此链接:http://peerit.blogspot.com/2007/07/multipartposthandler-doesnt-work-for.html 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(...)})

或者如果您需要饼干:

import urllib2, MultipartPostHandler, cookielib

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




相关问题
热门标签