2017-05-30 145 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"