2011-06-25 30 views
1

大家好(第一篇文章在這裏)。無法使用urllib和urllib2發送數據(python)

我正在嘗試將數據發送到網頁。如果一切正常,該網頁會請求兩個字段(一個文件和一個電子郵件地址),網頁會返回一個頁面,顯示「一切正常」並將文件發送到提供的電子郵件地址。我執行下面的代碼,並且在我的電子郵件帳戶中什麼都沒有。

import urllib, urllib2 

params = urllib.urlencode({'uploaded': open('file'),'email': '[email protected]'}) 
req = urllib2.urlopen('http://webpage.com', params) 
print req.read() 

打印命令給了我主頁的代碼(我假設它應該給出「一切正常」頁面的代碼)。我認爲(基於谷歌搜索)海報模塊應該做的伎倆,但我需要保持依賴關係到最低限度,因此我想要一個使用標準庫(如果可能的話)的解決方案。

在此先感謝。

+0

您錯過了任何標題? 'Content-type:application/x-www-form-urlencoded' –

+0

請不要在問題中發佈您的解決方案。如果下面的答案都沒有幫助,你*可以*和*應該*回答你自己的問題。 –

+0

對不起。我剛剛修好了。 – aloctavodia

回答

3

謝謝大家對你的答案。我使用機械庫解決了我的問題。

import mechanize 

br = mechanize.Browser() 
br.open('webpage.com') 

email='[email protected]' 

br.select_form(nr=0) 
br['email'] = email 
br.form.add_file(open('filename'), 'mime-type', 'filename')  
br.form.set_all_readonly(False) 
br.submit() 
+0

你實際上也可以接受這個答案 –

1

本網站可以檢查Referer,User-Agent和Cookies。

處理所有這一切的方法是使用urllib2.OpenerDirector,您可以通過urllib2.build_opener獲取。

# Cookies handle 
cj = cookielib.CookieJar() 
CookieProcessor = urllib2.HTTPCookieProcessor(cj) 
# Build OpenerDirector 
opener = urllib2.build_opener(CookieProcessor) 
# Valid User-Agent from Firefox 3.6.8 on Ubuntu 10.04 
user_agent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8' 
# Referer says that you send request from web-site title page 
referer = 'http://webpage.com' 
opener.addheaders = [ 
    ('User-Agent', user_agent), 
    ('Referer', referer), 
    ('Accept-Charset', 'utf-8') 
] 

然後用urlencode準備參數和opener.open(params)

文檔的Python 2.7發送請求:cookielibOpenerDirector

+0

感謝您的回答,但您的解決方案無法解決我的問題。我認爲(我剛剛意識到)我的問題與頁面需要將數據編碼爲「multipart/form-data」 – aloctavodia

+0

OK有關。然後,您可以使用建議的內容:[MultiPartPostHandler](http://peerit.blogspot.com/2007/07/multipartposthandler-doesnt-work-for.html)。這是幾行代碼,所以它不是真正的依賴關係。考慮它只是你自己的類,你昨天寫了方便的文件上傳:) – Kirill

+0

我想使用這種解決方案(有一些小的變化,但仍然不能正常工作)[鏈接] http://stackoverflow.com/questions/680305/using-multipartposthandler-to-post-form-data-with-python/681182#681182 – aloctavodia

相關問題