Ошибка 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",

Другие вопросы по тегам