2011-11-30 19 views
5

Quiero que mis usuarios vayan a un directorio protegido en mi dominio. Tanto .htaccess como .htpasswd se crean y residen en la biblioteca protegida.Autenticación HTTP básica, usando python

el código HTML que pide un nombre de usuario/contraseña es: script CGI

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

La pitón es:

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

Cuando entro en una combinación de nombre de usuario/contraseña correcta, la 'página web' resultante es:

> 

Sospecho que mi código python "resultado de impresión" no es correcto. ¿Cómo puedo arreglar esto?

Respuesta

1

El objeto devuelto de una llamada urlopen es muy parecido a una secuencia de archivo abierta, necesita read para obtener la salida.

Cambio print result-print result.read():

result = urllib2.urlopen(request) 

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

O, cambie result = urllib2.urlopen(request)-result = urllib2.urlopen(request).read():

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

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

Salida estos ejemplos: http://docs.python.org/library/urllib2.html#examples

fiambrera

+0

Gracias, su sugerencia funciona! –

1

Cuando se escribe:

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

Así, resource.read() # Lee la url como un archivo.

print resource # imprime el repr para el objeto de recurso y no el contenido real.

+0

Buena adición sobre cómo se imprime el 'repr' del objeto. – chown

+0

Gracias, su sugerencia es la misma que la sugerencia de @chown. –

Cuestiones relacionadas