2017-05-30 144 views
1

我通過SQL帳戶根據VirtSPARQLProtectSQLDigestAuthentication保護我的SPARQL端點。SPARQLWrapper HTTP錯誤401:未授權

from SPARQLWrapper import SPARQLWrapper, JSON, DIGEST 

sparql = SPARQLWrapper("http://example.org/sparql") 
sparql.setQuery("...") 
sparql.setReturnFormat(JSON) 
results = sparql.query().convert() 

在這之後,我用摘要的方式來獲取數據,

from SPARQLWrapper import SPARQLWrapper, JSON, DIGEST 

sparql = SPARQLWrapper("http://example.org/sparql") 

sparql.setHTTPAuth(DIGEST) 
sparql.setCredentials('login', 'password') 

sparql.setQuery("...") 
sparql.setReturnFormat(JSON) 

results = sparql.query().convert() 

,401錯誤發生:

此操作之前,我可以通過代碼獲得數據:

Traceback (most recent call last): File "1.py", line 21, in results = sparql.query().convert() File "/usr/local/lib/python2.7/site-packages/SPARQLWrapper/Wrapper.py", line 601, in query return QueryResult(self._query()) File "/usr/local/lib/python2.7/site-packages/SPARQLWrapper/Wrapper.py", line 581, in _query raise e urllib2.HTTPError: HTTP Error 401: Unauthorized

我的操作有什麼問題嗎?用戶名和密碼都是正確的。

欣賞如果任何人都可以提供幫助。

回答

2

好吧,我在寫完問題幾分鐘後才找到答案,這讓我想起了RTFSC。

線574〜581在Wrapper.py:

elif self.http_auth == DIGEST: 
    realm = "SPARQL" 
    pwd_mgr = urllib2.HTTPPasswordMgr() 
    pwd_mgr.add_password(realm, uri, self.user, self.passwd) 
    opener = urllib2.build_opener() 
    opener.add_handler(urllib2.HTTPDigestAuthHandler(pwd_mgr)) 
    urllib2.install_opener(opener) 

除了userpassword,還有另一個varible,realm(默認值爲"SPARQL"),但VirtSPARQLProtectSQLDigestAuthentication設置境界作爲"SPARQL Endpoint"

因此,解決方案只是將您的虛擬機的領域改爲"SPARQL"