2017-05-30 14 views
1

VirtSPARQLProtectSQLDigestAuthenticationに従ってSQLアカウントを使用して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() 

その後、私はデータを取得するために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 (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をもう一度思い出させます。

ライン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) 

userpasswordのほかに、別のvarible、realmがあります(デフォルト値は"SPARQL"である)が、VirtSPARQLProtectSQLDigestAuthentication"SPARQL Endpoint"としてレルムを設定します。

解決策は、あなたの巨匠の領域を"SPARQL"に変更することです。

関連する問題