0
我是Dydra的注册用户,并尝试以编程方式更新存储库。尽管我已经登录,但在尝试更新存储库时出现401错误。以下是我的代码:无法使用Python登录Dydra
username = 'myUsername'
password = 'myPassword'
URL = 'http://dydra.com/login'
with requests.Session() as s:
resp = s.get(URL)
soup = BeautifulSoup(resp.text)
csrfToken = soup.find('meta',{'name':'csrf-token'}).get('content')
# print csrf_token
payload = {
'account[login]':username,
'account[password]':password,
'csrfmiddlewaretoken':csrfToken,
'next':'/'
}
print payload
p = s.post(URL,data=payload, headers=dict(Referer=URL))
print p.text
r = s.get('http://dydra.com/myUsername/repoName/sparql')
print r.text
for stmt in dataGraph:
dydraSparqlEndpoint = 'http://dydra.com/myUsername/repoName/sparql'
queryStringUpload = 'INSERT DATA {%s %s %s}' % stmt
sparql = SPARQLWrapper(dydraSparqlEndpoint)
sparql.setQuery(queryStringUpload)
sparql.method = 'POST'
sparql.query()
for语句之前的代码按预期工作。那为什么insert语句会导致认证错误?我需要在代码中更改以成功登录?
我对您使用的API不够了解,但我没有看到将用户凭据连接到sparql对象的位置。我发现你之前使用凭证执行POST,但是不应该将它们也包含在sparql查询中? –
我的印象是,在Session中执行SPARQL查询将会处理它。这显然不起作用。我试图弄清楚如何在查询中包含凭据。 – kurious
Joshua是对的,我对Dydra也不熟悉,但是在大多数图形数据库中,您需要通过发送请求向您发送身份验证。你只是试图发布插入查询?这就是Stardog的功能:'resp = requests.post(transaction_endpoint,headers = HEADERS_RDF,data = open_file,auth = SPARQL_AUTH,palsrams = {'graph-uri':graph})' – Artemis