Реализация запроса внутренними функции логинома

0 голосов
Turov_D в категории Интеграция
У нас настроенная интеграция с Seldon, реализованная через post запросы в python с куками, в которых указаны данные для авторизации. Для авторизации используется метод POST, сохраняются куки и потом используется GET запрос. Но из-за такой реализации сильно нагружается процессор сервера и нагружает его именно питон. С интеграцией WB схожая ситуация, там ключи вшиты в заголовок запроса и всегда разные. Из-за чего возникает вопрос, как можно реализовать передачу.
Как можно реализовать схожу структуру подключения с помощью встроенных функций? По идеи нужно передавать куки для авторизации, но такой функции в запросе нет.

Ответы: 3 шт.

0 голосов
alexey.arustamov
 
Лучший ответ
А зачем использовать Python? Лучше для этой задачи воспользоваться JavaScript. В Loginom он тоже встроен. Работает быстрее, с нормальным параллелизмом и прочими плюшками. Вот тут - https://loginom.ru/blog/use-javascript-python все разложено по полочкам.

В реализации JavaScript в Loginom есть поддержка Fetch API и File Storage API (документация тут https://help.loginom.ru/userguide/processors/programming/java-script/). Думаю, на нем можно спокойно реализовать интеграцию с Seldon. Нагрузка на процессор будет во много раз ниже. Думаю, что и скорость будет выше.

Затем это можно будет обернуть в компонент и пожалуйста, пользуйтесь.
Turov_D
Спасибо!
Turov_D

Добрый день!
 Сейчас используется следующий код для интеграции с seldon :


import { InputTable, InputTables, InputVariables, OutputTable, DataType, DataKind, UsageType } from "builtIn/Data";

import {fetch, Request, Response, Headers} from "builtIn/Fetch";

let login_b = InputTable.Get(0, "BASIS_LOGIN"),

password_b = InputTable.Get(0, "BASIS_PASSWORD"),

    login_t = InputTable.Get(0, "TORGI_LOGIN"),

password_t = InputTable.Get(0, "TORGI_PASSWORD"),

inn = InputTable.Get(0, "inn"),

rnt = InputTable.Get(0, "rnt");

const body = {

    "response": "",

    "cookies": "",

    "e": ""

};

try {

  fetch('https://basis.myseldon.com/api/rest/login', {

    method: 'POST',

    body: 'UserName=' + encodeURIComponent(login_b) + '&Password=' + encodeURIComponent(password_b),

    headers: new Headers({'Content-Type': 'application/x-www-form-urlencoded'})

  })

  .then(response =>{

    const cookies = response.headers.get('Set-Cookie');

      body.cookies = cookies;

      return fetch('https://basis.myseldon.com/api/rest/get_company_owners?inn=$'+encodeURIComponent(inn)+'&type=1&source=1', {

        method: 'GET',

        headers: new Headers({'Cookie': cookies })

    });

  })

  .then(response => response.json())

  .then(data => {

    body.response = data;

    OutputTable.Append();

    OutputTable.Set(0, JSON.stringify(body));

    return fetch('https://basis.myseldon.com/api/rest/logout');

  })

  .catch(e => {

    body.e = e;

    OutputTable.Append();

    OutputTable.Set(0, JSON.stringify(body));

  });

} catch(e) {

  body.e = e;

  OutputTable.Append();

  OutputTable.Set(0, JSON.stringify(body));

}

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

0 голосов
Никита. К

По интересующему Вас вопросу рекомендую ознакомится со справкой (https://help.loginom.ru/userguide/integration/connections/list/rest-service.html).

arustamov_s
По компоненту REST сервис нельзя передать куки
0 голосов
arustamov_s
В вашем случае намного лучше и эффективнее использовать Fetch API (компонет JavaScript), через него можно отправлять авторизированные запросы, но они выключены по умолчанию, можно прочитать подробнее здесь: https://developer.mozilla.org/ru/docs/Web/API/Fetch_API/Using_Fetch
Turov_D
Спасибо большое!
...