Я зарегистрированный пользователь с Dydra и пытаюсь программно обновить репозиторий. Несмотря на то, что я вошел в систему, я получаю ошибку 401 при попытке обновить репозиторий. Ниже приведен мой код:Невозможно войти в Dydra с помощью Python
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? –
У меня создалось впечатление, что выполнение запроса SPARQL внутри сеанса позаботится об этом. Это явно не работает. Я пытаюсь выяснить, как включить учетные данные с запросом. – kurious
Джошуа прав, я тоже не знаком с Dydra, но в большинстве баз данных графа вам нужно отправить аутентификацию с помощью запроса на отправку. Вы только пытаетесь опубликовать запрос вставки? Вот как работает Stardog: 'resp = request.post (transaction_endpoint, headers = HEADERS_RDF, data = open_file, auth = SPARQL_AUTH, palsrams = {'graph-uri': graph})' – Artemis