根据VirtSPARQLProtectSQLDigestAuthentication,我通过SQL帐户保护了SPARQL端点。
在此操作之前,我可以通过代码获取数据:
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:
回溯(最近一次调用):文件"1.py",第21行,在results = sparql.query().convert()文件.convert第601行中,在查询返回QueryResult(self._query())文件.convert第581行中,在_query中提起e urllib2.HTTPError: HTTP错误401:未经授权
我的行动有什么问题吗?用户名和密码都是正确的。
如果有人能帮忙的话。
发布于 2017-05-30 07:21:29
嗯,我写这个问题几分钟后就找到了答案,这又让我想起了RTFSC。
Wrapper.py中的第574~581行:
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)除了user和password之外,还有另一个变量realm。(默认值是"SPARQL"),但是VirtSPARQLProtectSQLDigestAuthentication将领域设置为"SPARQL Endpoint"。
因此,解决方案只是将您的虚拟领域更改为"SPARQL"。
https://stackoverflow.com/questions/44254935
复制相似问题