-
處理接口依賴
-
在做接口的過(guò)程中基公,處理接口間的依賴很常見(jiàn)轰豆,這里要說(shuō)的是處理下個(gè)接口依賴登錄狀態(tài)的情況:
例:
分析問(wèn)題:
接口B調(diào)用的前提條件是當(dāng)前用戶必須是登錄狀態(tài)齿诞,而用戶登錄是由接口A完成的祷杈,所以我們要做的就是在調(diào)用接口B之前需要先調(diào)用接口A,并且獲得用戶的登錄狀態(tài)宿刮,就我現(xiàn)在公司來(lái)說(shuō)僵缺,服務(wù)端校驗(yàn)登錄狀態(tài)是根據(jù)當(dāng)前用戶的{_identity,PHPSESSID,user_type} 的key和value值決定的踩叭,換句話說(shuō)就是服務(wù)端只要找到這3個(gè)key的值就認(rèn)為當(dāng)前用戶處于登錄狀態(tài)容贝,只需要在請(qǐng)求接口的時(shí)候在Header中加入這些就可以了。
解決問(wèn)題:既然知道了冤今,原理就開(kāi)始吧戏罢。
-
首先要想辦法獲取調(diào)用接口A時(shí)龟糕,服務(wù)端植入的cookie悔耘,從而找到{_identity,PHPSESSID,user_type} 的key和value值;
import urllib, urllib2, cookielib #域名 main_domain =http://www.baidu.com #傳遞參數(shù) parameter={"r": "A", "phone": "13111111117", "passcode": "1234", "user_type": "100"} def getCookie(cls, parameter): u'獲取cookie內(nèi)容' #解析傳參 params = urllib.urlencode(parameter) #拼裝get方法的url url = main_domain+'/index.php?'+params #調(diào)用cookielib函數(shù)校摩,獲取cookie cookie = cookielib.CookieJar() handle = urllib2.HTTPCookieProcessor(cookie) opener = urllib2.build_opener(handle) opener.open(url) print "cookie"+str(cookie) #定義一個(gè)空字符串d衙吩,下邊要用到 d = "" #通過(guò)該方法獲取cookie中的key溪窒、value for item in cookie: name = item.name value = item.value #拼裝成固定格式 key = value dic = name + "=" + value #拼裝字符串 d = dic+";"+d log.debug(u'輸出cookie:' + str(d)) #生成Header字典 dic1 = {"Cookie": d} print "dic1="+str(dic1)
輸入結(jié)果:
cookie:PHPSESSID=rbeijkuu2e17b3i5j8gj81sim0;user_type=100;_identity=30adfe321230af6cf67c4b55f456c38ec9977a163b1dfeb20b3a928e767f0419a%3A2%3A%7Bi%3A0%3Bs%3A9%3A%22_identity%22%3Bi%3A1%3Bs%3A21%3A%22%5B488696%2Ctrue%2C2592000%5D%22%3B%7D;
dic1={Cookie:PHPSESSID=rbeijkuu2e17b3i5j8gj81sim0;user_type=100;_identity=30adfe321230af6cf67c4b55f456c38ec9977a163b1dfeb20b3a928e767f0419a%3A2%3A%7Bi%3A0%3Bs%3A9%3A%22_identity%22%3Bi%3A1%3Bs%3A21%3A%22%5B488696%2Ctrue%2C2592000%5D%22%3B%7D;}
-
注意:在添加Header的時(shí)候最好去瀏覽器中看一下接口Header的格式摹芙,
-
接下來(lái)就是將Header中加入指定k和v
parameter = {"r": "B", "demand_id": '2938'} def getInterface( parameter=None, headers={}): u''' parameter = {"r": "demand/info", "demand_id": '2938'}格式 ''' #獲取請(qǐng)求url get_url = main_domain+'/index.php?' #解析請(qǐng)求參數(shù) params = urllib.urlencode(parameter) send_url = get_url + params #訪問(wèn)接口 req = urllib2.Request(send_url, headers=headers) #打印請(qǐng)求日志: httpHandler = urllib2.HTTPHandler(debuglevel=1) httpsHandler = urllib2.HTTPSHandler(debuglevel=1) opener = urllib2.build_opener(httpHandler, httpsHandler) urllib2.install_opener(opener) #讀取返回值 response = urllib2.urlopen(req).read() #以json格式讀取 jresult = json.loads(response) print response print jresult
調(diào)用:
getInterface(parameter=parameter,headers=dic1)
-
完成
@晴天-2016-08-30 20:59:46 (后補(bǔ))