2012-09-04 53 views
3

我想用urllib登錄到一個網站。這是我公司的內部網站。用urllib登錄到一個網站

登錄頁面看起來是這樣的:

<form id="login" action="/accounts/login/" method="POST"> 
<label for="username">Username</label> 
<input name="username" type="text" class="text"><br> 
<label for="password">Password</label> 
<input name="password" type="password" class="text"><br> 
<input name="login_submit" type="submit" value="Sign in" class="submit"> 

我的蟒蛇看起來是這樣的:

url = 'http://10.188.36.250/accounts/login/' 
values = {'user_name':'xxxx', 'password':'xxxxx'} 
data = urllib.urlencode(values) 
req = urllib2.Request(url,data) 
res = urllib2.urlopen(req) 

我回去:

urllib2.HTTPError:HTTP錯誤403:禁止

我做錯了什麼?

回答

3

你所做的一切都是正確的,除了使用「user_name」作爲鍵而不是「username」。 注意表單的變量。

+0

良好的漁獲,但我仍然得到403 –

1

默認的urllib2打開不能很好地支持cookie。它實際上不支持任何東西,它是af(## $ @#夢魘工作。

要使用urllib2完成您的任務,請查看urllib2.HTTPCookieProcessor()urllib2.build_opener()。前者被傳遞到後者,會打開與我完全不記得頁面,但你的代碼可能看起來像:

opener= urllib2.build_opener(urllib2.HTTPCookieProcessor()) 
req = urllib2.Request(url , data) 
res = opener.open(req) 

我也建議看requests模塊這使得做互聯網-Y的東西不吸在python這麼多(http://docs.python-requests.org/en/latest/index.html

+0

您的建議,使用urllib2.HTTPCookieProcessor()和urllib2.build_opener(),沒」幫助。我仍然拿到了403.我嘗試了請求模塊 - 我沒有得到403,但我無法登錄 - 它只是重新登錄了登錄頁面。同樣感謝。 –

1

這都是因爲您必須在您的連接中使用標頭。插入最流行的網頁瀏覽器之一。在你的頭文件中。 Mozilla - 至少。您的代碼看起來像 -

req = urllib2.Request(url , data, headers=headers) 

其中頭= {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12'}