2011-09-21 45 views
2

我正在使用Python的suds庫,它試圖通過網絡獲取xml.xsd。不幸的是,由於像我這樣的其他程序,w3c服務器受到攻擊,通常無法爲文檔提供服務。如何防止泡沫通過網絡獲取xml.xsd?

如何攔截泡沫的URL抓取以始終獲取此文件的本地副本,即使無需第一次將其成功下載到長壽命緩存中?

回答

4

獲取xml.xsd的問題與大多數WSDL所需的「http://www.w3.org/XML/1998/namespace」命名空間有關。該名稱空間默認映射到http://www.w3.org/2001/xml.xsd

,你可以覆蓋位置這個命名空間結合指向一個本地文件:

from suds.xsd.sxbasic import Import 

file_url = 'file://<path to xml.xsd>' 
Import.bind('http://www.w3.org/XML/1998/namespace', file_url) 
0

suds庫有一個類suds.store.DocumentStore,它在uri - >文本字典中保存了捆綁的XML。它可以修補,像這樣:

suds.store.DocumentStore.store['www.w3.org/2001/xml.xsd'] = \ 
    file('xml.xsd', 'r').read() 

不幸的是這不起作用,因爲DocumentStore只是榮譽爲suds://協議的請求。一個猴子補丁後來,你在生意上。

也可以覆蓋傳遞到泡沫的Cache()實例,但高速緩存處理基於Python的hash()的數字ID,並且不會獲取其內容的URL。