2011-11-30 61 views
5

Kullanıcılarımın etki alanımdaki korumalı bir dizine gitmesini istiyorum. Hem .htaccess hem de .htpasswd, korunan kitaplıkta oluşturulur ve bu kütüphanede bulunur.HTTP temel kimlik doğrulaması, python kullanarak

bir kullanıcı adı/şifre kombinasyonu sorar html geçerli:

<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"> 

piton cgi script:

#!/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 

Ben doğru kullanıcı adı/şifre kombinasyonunu girmek

, Ortaya çıkan 'web sayfası':

> 

Python kodum "yazdırma sonucunun" doğru olmadığından şüpheleniyorum. Bunu nasıl düzeltebilirim?

cevap

1

urlopen numaralı çağrıdan döndürülen nesne, açık bir dosya akışına çok benzer, çıktı almak için read'a ihtiyacınız vardır.

Değişim print resultprint result.read() için:

result = urllib2.urlopen(request) 

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

Veya, değiştirmek result = urllib2.urlopen(request)result = urllib2.urlopen(request).read() için:

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

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

Kontrol dışarı bu örneklerin: http://docs.python.org/library/urllib2.html#examples

+0

Teşekkür ederiz, öneriniz işe yarıyor! –

1

Yazdığınız beslenme çantası:

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

Yani, resource.read() # bir dosya gibi url okur. Kaynak nesnesi için gerçek içeriğe değil repr numaralı numaralı resme

+0

Nesnenin 'repr'ünü nasıl yazdırdığı hakkında iyi bir ekleme. – chown

+0

Teşekkürler, öneriniz @chown'un önerisi ile aynıdır. –

İlgili konular