Ошибка SPARQLWrapper HTTP 401: неавторизован
Я защитил свою конечную точку SPARQL через учетные записи SQL в соответствии с VirtSPARQLProtectSQLDigestAuthentication.
Перед этой операцией я могу получить данные через код:
from SPARQLWrapper import SPARQLWrapper, JSON, DIGEST
sparql = SPARQLWrapper("http://example.org/sparql")
sparql.setQuery("...")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
И после этого я использую DIGEST способ получить данные,
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 (последний вызов был последним): файл "1.py", строка 21, в результатах = sparql.query(). Convert() файл "/usr/local/lib/python2.7/site-packages/SPARQLWrapper/Wrapper.py", строка 601, в запросе возвращает файл QueryResult(self._query())" /usr/local/lib/python2.7/site-packages/SPARQLWrapper/Wrapper.py ", строка 581, в _query поднять urllib2.HTTPError: Ошибка HTTP 401: неавторизован
Что-то не так с моими операциями? Имя пользователя и пароль верны.
Цените это, если кто-то может помочь.
1 ответ
Ну, я нашел ответ только через несколько минут после того, как написал проблему, которая снова напоминает мне 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)
Кроме того user
а также password
есть еще одна переменная,realm
. (значение по умолчанию "SPARQL"
), но VirtSPARQLProtectSQLDigestAuthentication устанавливает область как "SPARQL Endpoint"
,
Таким образом, решение - просто изменить сферу вашего виртуоза на "SPARQL"
,