6

我目前正在尝试使用 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 为 )。

当我右键单击一个文件,选择发送到,然后选择 Aquate (my python) 时,它会在瞬间打开一个命令提示符,然后将其关闭。什么都没有上传。

我知道可能发生了错误,所以我将代码逐行输入到 CL python 中。当我跑u=urllib2.urlopen(req)线时,我没有收到错误; 替代文字 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()

如果您通过命令行运行该代码,它就像一个魅力。

4

3 回答 3

2

如果您使用的是 Python 2.5 或更高版本,urllib2_file则既不必要也不支持,因此请检查您使用的是哪个版本(可能还需要升级)。

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

编辑:

此外,您似乎没有使用urllib2_filePOST 数据的两种支持格式中的任何一种。尝试使用以下两行之一:

d = ['uploaded', open(sys.argv[1:])]
## --OR-- ##
d = {'uploaded': open(sys.argv[1:])}
于 2009-01-02T17:52:22.773 回答
0

首先,还有第三种运行 Python 程序的方法。

在 cmd.exe 中,键入python myprogram.py. 你会得到一个很好的日志。您不必一次输入一行内容。

其次,查看urrlib2文档。您还需要查看urllib

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

data 应该是标准 application/x-www-form-urlencoded 格式的缓冲区。urllib.urlencode() 函数采用 2 元组的映射或序列,并以这种格式返回一个字符串。

您需要对数据进行编码。

于 2009-01-02T17:56:42.000 回答
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(...)})

或者如果您需要 cookie:

import urllib2, MultipartPostHandler, cookielib

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), MultipartPostHandler.MultipartPostHandler())
opener.open(url, {"file":open(...)})
于 2010-10-25T22:29:34.373 回答