2012-06-03 40 views
2

我想寫一個使用python的小型基於web的代理,我可以獲取並顯示正常的網站,但我無法登錄到facebook/gmail/...任何與登錄。 我在這裏看到了一些身份驗證的例子 http://docs.python.org/release/2.5.2/lib/urllib2-examples.html但我不知道如何使用登錄,任何想法爲所有網站制定一個通用的解決方案?如何使用python urllib2.urlopen打開Facebook/gmail/authencation網站?

我的代碼是:

def showurl(): 
    url=request.vars.url 
    response = urllib2.urlopen(url) 
    html = response.read() 
    return html 

回答

2

你的代理服務器需要存儲的cookie,搜索計算器的cookielib。

許多網站以不同的方式對客戶端進行身份驗證,因此您的工作是儘可能使用您的代理服務器僞造客戶端。一些網站通過瀏覽器類型進行身份驗證,一些通過創建cookie並將sessionId存儲在其中,或者其他允許執行一些驗證步驟的JavaScript隱藏內容。根據我的小經驗,所有重要的東西都以餅乾結尾。

這只是平坦的示例如何使用cookielib。

import urllib, urllib2, cookielib, getpass 

username = '' 
button = 'submit' 
www_login = 'http://website.com' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
opener.addheaders.append(('User-agent', 'Mozilla/4.0')) 
opener.addheaders.append(('Referer', '/dev/null')) 

login_data = urllib.urlencode({'username' : username, 'password': getpass.getpass("Password:"), 'login' : button}) 
resp = opener.open(www_login, login_data) 
print resp.read() 

編輯: 不要用「基本HTTP認證」誤導自己,被Facebook/Gmail的身份驗證,因爲它是不同的東西。 「基本HTTP認證」或「文摘HTTP認證」是要登錄Web服務器而不是web站點完成。

+0

有沒有辦法讓它所有的網站?所以我不必輸入用戶名,並通過永遠單一的網站int他的代碼? (我希望用戶能夠登錄任何他們想要的網站,並輸入他們自己的用戶名通行證) –

+0

現在我明白了這個問題......這是可能的,但我不確定是否有一個簡單的方法來做到這一點,一個函數... http://proxies.xhaus.com/python/這是python代理項目的列表http://code.google.com/p/proxpy/ ...谷歌「在python中的web代理」。而且我認爲你的問題現在是https/cookies,如果你已經做了簡單的http代理。希望這可以幫助。 – okobaka

+0

http://docs.python-requests.org/en/latest/index.html它是urllib2的'替代品',讓事情變得更簡單... – okobaka