2011-11-30 113 views
5

我希望我的用戶轉到我的域的受保護目錄。 .htaccess和.htpasswd都被創建並駐留在受保護的庫中。HTTP基本認證,使用python

,要求輸入用戶名/密碼組合的HTML是:

<form method="post" enctype="multipart/form-data" action="bin/logintest.cgi"> 
Username: <input type="text" name="username" size="20" value="please enter.."><br> 
Password: <input type="password" name="password" size="20"><BR> 
<input name="submit" type="submit" value="login"> 

蟒蛇CGI腳本是:

#!/usr/bin/python 

import urllib2 
import base64 
import cgi 

form = cgi.FieldStorage() 
username = form.getfirst("username") 
password = form.getfirst("password") 

request = urllib2.Request("http://www.mydomain.com/protecteddir/index.html") 
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '') 
request.add_header("Authorization", "Basic %s" % base64string) 
result = urllib2.urlopen(request) 

print "Content-type: text/html\n\n" 
print result 

當我輸入正確的用戶名/密碼組合,由此產生的'網頁'是:

> 

我懷疑我的python代碼「打印結果」不正確。我怎樣才能解決這個問題?

回答

1

urlopen調用返回的對象很像打開的文件流,你需要read它來獲得輸出。

變化print resultprint result.read()

result = urllib2.urlopen(request) 

print "Content-type: text/html\n\n" 
print result.read() 

或者改變result = urllib2.urlopen(request)result = urllib2.urlopen(request).read()

result = urllib2.urlopen(request).read() 

print "Content-type: text/html\n\n" 
print result 

查閱這些例子:http://docs.python.org/library/urllib2.html#examples

飯盒

+0

謝謝您的建議! –

1

當你寫:

resource = urllib2.urlopen(url) 
# Here resource is your handle to the url 
# resource provides a read function that mimics file read. 

所以,resource.read()#讀起來就像一個文件的URL。

print resource#爲資源對象打印repr,而不打印實際內容。

+0

關於如何打印對象的'repr'的好處。 – chown

+0

謝謝你,你的建議和@chown的建議是一樣的。 –