Ошибка при отправке POST из библиотеки запросов python; не происходит через интерфейс пользователя alfresco

Использование версии OOTB Alfresco 5 Community на Ubuntu14.04

Шаги: создайте сайт через общий интерфейс. Копировать запрос как завиток из инструментов разработчика Chromium. Реконструированный запрос в библиотеке запросов python:

s=requests.post('http://<ip>:8080/share/service/modules/create-site',data=site_data,cookies=THE_cookie
</ip>

Где THE_cookie был получен через POST на http://: 8080/share/page/dologin, который дал 200, а site_data имеет разные имена для сайта, созданного через общий интерфейс пользователя.

Этот запрос дал ошибку 500, в которой указано, что

u'freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:\n==> success [in template "org/alfresco/modules/create-site.post.json.ftl" at line 2, column 17]\n\nTip: If the failing expression is known to be legally null/missing, either specify a default value with myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing<!--#if-->. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??\n\nThe failing instruction:\n==> ${success?string} [in template "org/alfresco/modules/create-site.post.json.ftl" at line 2, column 15]', ...

Когда в Chromium нет ответа, сайт создается успешно.

У меня также нет запроса на завивание из командной строки для работы - ему нужен токен CSRF, затем он дает 200 и ничего не делает; нет журналов. Я понимаю, что Alfresco всегда дает 200 по успешному запросу независимо от того, является ли это GET или POST.

Если у кого-то есть идеи, которые были бы удивительными. Кажется, что мы не можем что-то сделать, чтобы заставить сайт-создатель работать вне пользовательского интерфейса, но нам это абсолютно необходимо.

2 ответа

Поскольку сценарий ожидает JSON, вам нужно установить HTTP-заголовок "Content-Type: application/json".


Взгляните на объекты запросов "Запросы", которые предназначены для сохранения cookie сеансов между запросами (например, браузер). Вы можете попробовать подобный подход:

s = requests.session()
s.post('http://<ip>:8080/share/page/dologin', data=login_data)
r = s.post('http://<ip>:8080/share/service/modules/create-site', data=site_data)
</ip></ip>

licensed under cc by-sa 3.0 with attribution.