Основно HTTP удостоверяване, използвайки python

Искам потребителите ми да отидат в защитена директория на моя домейн. Както .htaccess, така и .htpasswd се създават и се намират в защитената библиотека.

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

The python cgi script is:

#!/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 код „отпечатване на резултат“ не е правилен. Как мога да поправя това?


person Paul van Toesmeer    schedule 30.11.2011    source източник


Отговори (2)


Върнатият обект от urlopen повикване е много подобен на отворен файлов поток, трябва да го read, за да получите изхода.

Променете print result на print 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

кутия за обяд

person chown    schedule 30.11.2011

Когато пишете:

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 за ресурсния обект, а не действителното съдържание.

person Yugal Jindle    schedule 30.11.2011
comment
Добро допълнение за това как отпечатва repr на обекта. - person chown; 30.11.2011
comment
Благодаря ви, вашето предложение е същото като предложението на @chown. - person Paul van Toesmeer; 30.11.2011