我正在使用Python的suds庫,它試圖通過網絡獲取xml.xsd。不幸的是,由於像我這樣的其他程序,w3c服務器受到攻擊,通常無法爲文檔提供服務。如何防止泡沫通過網絡獲取xml.xsd?
如何攔截泡沫的URL抓取以始終獲取此文件的本地副本,即使無需第一次將其成功下載到長壽命緩存中?
我正在使用Python的suds庫,它試圖通過網絡獲取xml.xsd。不幸的是,由於像我這樣的其他程序,w3c服務器受到攻擊,通常無法爲文檔提供服務。如何防止泡沫通過網絡獲取xml.xsd?
如何攔截泡沫的URL抓取以始終獲取此文件的本地副本,即使無需第一次將其成功下載到長壽命緩存中?
獲取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)
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。