1

J'ai sécurisé mon point de terminaison SPARQL via les comptes SQL selon VirtSPARQLProtectSQLDigestAuthentication.SPARQLWrapper Erreur HTTP 401: non autorisée

Avant cette opération, je peux obtenir les données via le code:

from SPARQLWrapper import SPARQLWrapper, JSON, DIGEST 

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

Et après cela, je l'utilise comme DIGEST pour obtenir les données,

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() 

, erreur 401 est produite:

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

Quelque chose ne va pas avec mes opérations? Le nom d'utilisateur et le mot de passe sont corrects.

Appréciez que si quelqu'un peut vous aider.

Répondre

2

Eh bien, j'ai trouvé la réponse juste quelques minutes après que j'ai écrit le problème, ce qui me rappelle de nouveau RTFSC.

ligne 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) 

En plus user et password, il y a un autre varible, realm (valeur par défaut est "SPARQL"), mais VirtSPARQLProtectSQLDigestAuthentication mis le royaume comme "SPARQL Endpoint"..

La solution consiste simplement à changer le domaine de votre virtuose en "SPARQL".