•什么是HTTP基本认证:
桌面应用程序也通过HTTP协议跟web服务器交互,桌面应用程序一般不会使用cookie,而是把‘用户名+:+密码’用base64编码之后的string放在request中的header Authorization中发送给服务端。
当打开网页提示需要输入账号和密码时,假设密码/账号错误,服务器会返回401错误。
•HTTP基本认证的过程:
1)客户端发送request给服务端,
2)因为request中没有包含Authorization header,服务器会返回一个401错误给客户端。
3)客户端把用户名和密码用base64编码之后,放在Authorization header中发送给服务器,认证成功。
4)服务端将Authorization header中的用户名和密码取出来,进行验证,如果验证通过将根据需求发送资源给客户端。
•HTTP OAuth认证
OAuth对于HTTP来讲,就是放在OAuthorization header中的不是用户名和密码,而是一个token。
•python案例:
#python 27 #xiaodeng #HTTP权威指南 133 #通过添加HTTP header来实现
import urllib,urllib2
from base64 import encodestring
url=''
user=''
passwd=''
req=urllib2.Request(url)
basestr=encodestring('%s:%s'%(user,passwd))[:1]
req.add_header('Authorization','Basic %s'% basestr)
f=urllib2.urlopen(req)
#通过headler来实现
import urllib2
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()#创建密码管理器
url = "http://www.163.com/"
password_mgr.add_password(None, url, username, password)# 添加用户名和密码.如果知道realm,用它代替None.
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)#创建opener
a_url = 'http://www.baidu.com/'
opener.open(a_url)#打开一个url
urllib2.install_opener(opener) #安装opener,以后urllib2.urlopen都会用它。
import urllib2
import base64
theurl = 'http://api.minicloud.com.cn/statuses/friends_timeline.xml'
req=urllib2.Request(theurl)
username = ''
password = ''
base64string = base64.encodestring('%s:%s' % (username, password))[:-1] #注意哦,这里最后会自动添加一个\n
authheader = "Basic %s" % base64string
req.add_header("Authorization", authheader)
handle = urllib2.urlopen(req)
thepage = handle.read()
print thepage
在你需要做访问控制,又不想拖上SSO、数据库之类的东西的时候,http auth不失为一个简洁的选项。此种方式好在 header中的 Authorization不会过期,但基于其原理不够安全。