在獲取zk節點時,有些子節點名字直接就是編碼後的url,就像下面這行同樣:python
url='dubbo%3A%2F%2F10.4.5.3%3A20880%2Fcom.welab.authority.service.AuthorityService%3Fanyhost%3Dtrue%26application%3Dwelab-authority%26dubbo%3D2.5.7'
先須要把這個url裏進行解碼, 轉成以下這種:app
dubbo://10.4.5.3:20880/com.welab.authority.service.AuthorityService?anyhost=true&application=welab-authority&dubbo=2.5.7
而後有用的參數: url中的ip地址, 參數中application對應的值ide
>>> import urlparse >>> urldata = urlparse.unquote(url) >>> print urldata dubbo://10.4.5.3:20880/com.welab.authority.service.AuthorityService?anyhost=true&application=welab-authority&dubbo=2.5.7 #轉成一個格式化對象 >>> result = urlparse.urlparse(urldata) >>> print result ParseResult(scheme='dubbo', netloc='10.4.5.3:20880', path='/com.welab.authority.service.AuthorityService', params='', query='anyhost=true&application=welab-authority&dubbo=2.5.7', fragment='') #提取url中的參數,即url中?後的內容 >>> args = urlparse.parse_qs(result.query) >>> print args {'application': ['welab-authority'], 'anyhost': ['true'], 'dubbo': ['2.5.7']} #獲取我想要的信息 >>> ip= result.netloc >>> application = args.get('application',[]) >>> print ip 10.4.5.3:20880 >>> print application ['welab-authority']
上面的測試中詳細打印了輸出信息, 此次就直接寫在py腳本里了。 測試
from urllib import parse #url解碼 urldata = parse.unquote(urldata) #url結果 result = parse.urlparse(urldata) #url裏的查詢參數 query_dict = parse.parse_qs(result.query) #獲取我須要的信息 ip = result.netloc application = query_dict.get('application',[])