[英]Python urllib2 file upload problems
我目前正在嘗試使用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)
行時,我沒有收到錯誤; 替代文字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()
如果您通過命令行運行它,該代碼就像一個魅力。
如果您使用的是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:])}
如果你還在使用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(...)})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.