•什么是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