HTTP協議詳解之基本認證篇


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM