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