HTTP basic authentication, using python

房东的猫 提交于 2019-12-12 10:49:54

问题


I want my users to go to a protected directory on my domain. Both .htaccess and .htpasswd are created and reside in the protected library.

The html that asks for a username/password combination is:

<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

When I enter a correct username/password combination, the resulting 'webpage' is:

>

I suspect that my python code "print result" is not correct. How can I fix this?


回答1:


The returned object from a urlopen call is much like an open file stream, you need to read it to get the output.

Change print result to print result.read():

result = urllib2.urlopen(request)

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

Or, change result = urllib2.urlopen(request) to result = urllib2.urlopen(request).read():

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

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

Check out these examples: http://docs.python.org/library/urllib2.html#examples

lunchbox




回答2:


When you write :

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

So, resource.read() # Reads the url like a file.

print resource # prints the repr for the resource object and not the actual content.



来源:https://stackoverflow.com/questions/8329919/http-basic-authentication-using-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!