1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 10
1

GET запрос на сайт fsa.gov.ru и получение ответа в LibreOffice Calc

21.09.2021, 16:54. Показов 11556. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Есть задача проверять актуальность деклараций на сайте росаккредитации, деклараций много, проверять достаточно часто, чтоб не ушли в архив. Сайт как я понял на сделан Java. Так вот хотелось бы автоматизировать этот процесс, отправив нужный запрос на сайт росреестра и заполнить нужные поля в таблице ЛибреОфис. Подскажите, как найти/сформировать GET запрос и соответственно получить ответ с нужными данными.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2021, 16:54
Ответы с готовыми решениями:

Запрос и получение ответа
Здравствуйте. Вопрос таков. Я делаю веб запрос через webbrowser.Navigate(ссылка), на что я...

Запрос и получение ответа
Есть сайт: http://stats.maide.ca/players/index/ там есть форма для ввода ника. Как можно сделать...

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

Отправка текста на сайт получение ответа
Можно ли сделать так: Чтобы потльзователь вводил текст,т е какую-нибудь строку,например...

17
960 / 522 / 244
Регистрация: 20.05.2015
Сообщений: 774
21.09.2021, 18:17 2
Arsenich, здравствуйте. Нужно использовать серверные языки программирования. PHP, Python или что-то еще.

Запрос методом POST.

Код
https://pub.fsa.gov.ru/api/v1/rds/common/declarations/get
Тело запроса (нагрузка). Это то, что Вы выбрали в фильтрах. Номер декларации о соответствии, Дата регистрации декларации, Статус и прочее. (В запрос подставлял только номер).

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{
  "size": 10,
  "page": 0,
  "filter": {
    "status": [],
    "idDeclType": [],
    "idCertObjectType": [],
    "idProductType": [],
    "idGroupRU": [],
    "idGroupEEU": [],
    "idTechReg": [],
    "idApplicantType": [],
    "regDate": { "minDate": null, "maxDate": null },
    "endDate": { "minDate": null, "maxDate": null },
    "columnsSearch": [
      {
        "name": "number",
        "search": "РАX1.А.XX99X/2Y", // номер сертификата
        "type": 0,
        "translated": false
      }
    ],
    "idProductOrigin": [],
    "idProductEEU": [],
    "idProductRU": [],
    "idDeclScheme": [],
    "awaitForApprove": null,
    "awaitOperatorCheck": null,
    "editApp": null,
    "violationSendDate": null
  },
  "columnsSort": [{ "column": "declDate", "sort": "DESC" }]
}
Заголовки.

Один из главных заголовков, который необходимо отправлять — это Authorization Bearer JWT_TOKEN. На сервере используется JWT механизм. Токен живет ровно 8 часов.

Пример декодированного токена:

Javascript
1
2
3
4
5
{
  "iss": "b076fe2a-cb86-421e-a388-62ab125d6ae2",
  "sub": "anonymous",
  "exp": 1632262581 // действителен до GMT: Tuesday, 21 September 2021 г., 22:16:21
}
При успешном запросе, Вы получите JSON:

JSON
1
2
3
4
5
6
7
8
9
{
  "items": [
    {
      "id": 16123550,
      "idStatus": 6,
      "number": "ЕАЭС N RU Д-RU.РАX1.А.XX99X/2Y",
      "declDate": "2021-09-20"
 
// ...
Но, никто Вам не даст часто отправлять запросы. При частых запросах, токен сбрасывается и генерируется новый. Его, скорее всего, можно как-то вытащить. Но, я не смотрел.
2
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 10
22.09.2021, 10:35  [ТС] 3
Спасибо!
Тело запроса и адрес я кое как выкопал.
Запрос скорее всего буду пробовать делать на РНР.
Но вот вопрос, как его связать с либреофисом, как его отправить серверу...
В принципе особой привязки к либре нету, главное получить ответы и увидеть статус деклараций ("idStatus": 6)
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
22.09.2021, 11:10 4
Цитата Сообщение от Arsenich Посмотреть сообщение
отправив нужный запрос на сайт росреестра и заполнить нужные поля в таблице ЛибреОфис.
Можете попробовать в разделе OpenOffice/LibreOffice задать вопрос. Возможно, эту задачу можно решить с помощью макроса.
1
960 / 522 / 244
Регистрация: 20.05.2015
Сообщений: 774
22.09.2021, 19:48 5
Arsenich, вообще да. Как правильно заметил Kerry_Jr. Можно посмотреть в сторону макросов.

С LibreOffice никогда не сталкивался. Но, на коленке собрал скрипт для проверки в Google Таблицах. Там используется JavaScript. На удивление, сервер fsa.gov.ru даже не задал вопросов по поводу большого количества запросов.

Кликните здесь для просмотра всего текста
Код
Decl	                Code
IL.РА01.А.95640/21	6
RU.РА01.А.94316/21	6
MC.РА01.В.87963/21	6
RU.РА01.А.95443/21	6
TR.РА01.В.32131/21	6
CN.РА01.В.55720/21	6
ZA.РА01.В.95612/21	6
GB.РА01.В.89312/21	6
FR.РА01.В.95570/21	6
RU.РА01.В.95605/21	6
CN.РА01.В.55118/21	6
CN.РА01.В.81447/21	6
TR.РА01.В.95537/21	6
TR.РА01.В.94681/21	6
RU.РА01.А.95594/21	6
IT.РА01.В.95574/21	6
NL.РА01.В.95580/21	6
RU.РА01.В.95562/21	6
TR.РА01.В.91070/21	6
AZ.РА01.А.95572/21	6
CN.РА01.В.91646/21	6
TR.РА01.В.94680/21	6
DE.РА01.В.66786/21	6
TR.РА01.В.95558/21	14
CN.РА01.В.95325/21	6
IT.РА01.В.95311/21	6
AZ.РА01.В.88711/21	6
TR.РА01.А.95550/21	6
RU.РА01.А.95524/21	6
GB.РА01.В.88974/21	6
SE.РА01.В.91944/21	6
PT.РА01.В.45040/21	6
US.РА01.В.93242/21	6
CN.РА01.В.90233/21	6
IT.РА01.В.88491/21	6
CN.РА01.В.95522/21	6
UZ.РА01.В.94354/21	6
TR.РА01.А.95528/21	6
UA.РА01.В.72002/21	6
IT.РА01.В.94471/21	6
RS.РА01.В.95296/21	6
CN.РА01.В.95413/21	6
AT.РА01.В.94602/21	6
IT.РА01.В.87633/21	6
DE.РА01.В.91005/21	6
US.РА01.В.95306/21	6
ES.РА01.В.76626/21	6
MD.РА01.В.94349/21	6
TR.РА01.В.95335/21	6
RU.РА01.А.54061/21	6
DE.РА01.В.89804/21	6
FR.РА01.В.95330/21	6
CN.РА01.В.43736/21	6
DE.РА01.А.94257/21	6
TR.РА01.В.95390/21	6
RU.РА01.В.95392/21	6
UA.РА01.А.92377/21	6
DE.РА01.В.67050/21	6
UZ.РА01.В.89015/21	6
IL.РА01.А.95374/21	6
RU.РА01.В.92854/21	6
TR.РА01.А.95317/21	6
DE.РА01.В.95337/21	6
DO.РА01.В.95354/21	6
CN.РА01.В.95193/21	6
GE.РА01.А.95261/21	6
IR.РА01.В.95320/21	6
RU.РА01.А.87499/21	6
AT.РА01.В.94072/21	6
CN.РА01.В.95301/21	6
GR.РА01.А.95273/21	6
SI.РА01.В.91472/21	6
2
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 10
22.09.2021, 20:07  [ТС] 6
Во, почти то что надо... А можно посмотретт на этот скрипт?
0
960 / 522 / 244
Регистрация: 20.05.2015
Сообщений: 774
22.09.2021, 20:35 7
Лучший ответ Сообщение было отмечено Arsenich как решение

Решение

Arsenich, да там не на что смотреть.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function checkCertificate($crt) {
 
  return sendRequest('/declarations/get', $crt)
 
  function sendRequest($endpoint, certificateNumber) {
    const payload = {
      "size": 10,
      "page": 0,
      "filter": {
        "status": [],
        "idDeclType": [],
        "idCertObjectType": [],
        "idProductType": [],
        "idGroupRU": [],
        "idGroupEEU": [],
        "idTechReg": [],
        "idApplicantType": [],
        "regDate": { "minDate": null, "maxDate": null },
        "endDate": { "minDate": null, "maxDate": null },
        "columnsSearch": [
          {
            "name": "number",
            "search": certificateNumber,
            "type": 0,
            "translated": false
          }
        ],
        "idProductOrigin": [],
        "idProductEEU": [],
        "idProductRU": [],
        "idDeclScheme": [],
        "awaitForApprove": null,
        "awaitOperatorCheck": null,
        "editApp": null,
        "violationSendDate": null
      },
      "columnsSort": [{ "column": "declDate", "sort": "DESC" }]
    };
 
    const parameters = {
      'method': 'POST',
      'contentType': 'application/json',
      headers: {
        'Origin': 'https://pub.fsa.gov.ru',
        'Referer': 'https://pub.fsa.gov.ru/rds/declaration',
        'Authorization': "Bearer eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJkZGI5MGZiNy1iYWMyНTQxOWEtOTkwYS0yYjkyYjhhYmY2MTIiLCJzdWIiOiJhbm9ueW1vdXMiLCJleHAiOjE2MzIzNTA0Mzh9.lwjTkbv4ROyQOjkx87njjVsLV2YApXkhDAybIVuNINJVttBBWtUYL1aMRw5cvrs-eptTWoz9p6-JQl5zWhynug" // тестовый
      },
      'payload': JSON.stringify(payload)
    };
 
    let request = UrlFetchApp.fetch('https://pub.fsa.gov.ru/api/v1/rds/common' + $endpoint, parameters);
    let r_ = JSON.parse(request.getContentText());
 
    return r_.items[0].idStatus;
 
  }
 
}
Использовал «руками изменяемый» JWT токен. Но всё это решаемо. А вообще, если Вы разобрались с запросами на fsa.gov.ru, могли заметить откуда прилетает этот токен.


Запрос методом POST

Код
https://pub.fsa.gov.ru/login
Тело запроса:

Код
{"username":"anonymous","password":"hrgesf7HDR67Bd"} // это статичный логин и пароль для анонимных пользователей

В ответ сервер отдаст заголовки. В них будет то нам нужно:
Код
Authorization Bearer eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJkZGI5MGZiNy1iYWMyНTQxOWEtOTkwYS0yYjkyYjhhYmY2MTIiLCJzdWIiOiJhbm9ueW1vdXMiLCJleHAiOjE2MzIzNTA0Mzh9.lwjTkbv4ROyQOjkx87njjVsLV2YApXkhDAybIVuNINJVttBBWtUYL1aMRw5cvrs-eptTWoz9p6-JQl5zWhynug
Если никогда не работали с Google Таблицами.

Создаете таблицу. В меню выбираете «Инструменты» → «Редактор скриптов» → Создаете файл с расширением gs.

А дальше на листе вызываете функцию =checkCertificate(аргумент_ячейка)
3
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 10
22.09.2021, 20:37  [ТС] 8
Вот спасибо!
Завтра буду разбираться, подгонять под свои нужды
0
960 / 522 / 244
Регистрация: 20.05.2015
Сообщений: 774
22.09.2021, 20:59 9
Arsenich, на всякий случай добавлю. У Google ограничения для обычных аккаунтов.

Код
URL Fetch calls	20,000 / day
1
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 10
03.10.2021, 12:27  [ТС] 10
Еще раз спасибо за подсказки! Все запустил, все работает) Теперь разбираюсь как получать от сервера токен чтоб не менять его постоянно ручками, и как обойти тормоза сервера и базы, т.к. часто не может достучаться и получить ответ - выдает ошибку)))
0
960 / 522 / 244
Регистрация: 20.05.2015
Сообщений: 774
03.10.2021, 16:26 11
Arsenich, что выбрали для решения задачи? Google Таблицы?

Получить токен можно вот так:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function getAuth0() {
  const parameters = {
    method: 'POST',
    contentType: 'application/json',
    headers: {
      Origin: 'https://pub.fsa.gov.ru',
    },
    payload: JSON.stringify({ 'username': 'anonymous', 'password': 'hrgesf7HDR67Bd' }),
  };
 
  const request = UrlFetchApp.fetch(
    'https://pub.fsa.gov.ru/login',
    parameters
  );
 
 
  if (request.getResponseCode() === 200) {
    Logger.log(request.getAllHeaders().Authorization);
  } else {
    Logger.log('HTTP request failed');
  }
}
 
// вернет,
// Bearer eyJhbGciOiJIUzUxMiJ9.eyJpc3MiTiI0MWMzNDRlYS03YjIwLTQwNWUtODZhYy1iY2NmOTRkNzM0OTciLSJzdWIiOiJhbm9ueW1vdXMiLYJleHAiOjJ2MzMyOTU5NDV1.VSUbnFYFwNVld46VwRbHWuvL3yCnfLGIIYrlu_gunR4cGqQFKKUqYUYDkvKxreLNLaL7R7ZkKtPFCF9JdaP4JQ
А дальше смотрите сами.

Как вариант, создать меню на панели в Google Таблицы. Каждый раз, когда заходите туда — нажимаете «Получить токен». Формируете его и отправляете в специально отведенную ячейку.

Дальше, вызывайте =checkCertificate(аргумент_ячейка_с_токеном, аргумент_ячейка_с_номером_декларации)

Или, проверяйте актуальность токена непосредственно в функции checkCertificate(). JWT — это всего лишь строка из 3-х частей (разделена точками) закодированная в base64. GAS умеет декодировать его. Вам нужна вторая часть токена. Там обычный JSON. Находите в нем ключ exp и сравнивайте дату. А дальше по ситуации. Либо получаете новый, либо работаете с имеющимся.

Структура JWT

eyJhbGciOiJIUzUxMiJ9.eyJpc3MiTiI0MWMzNDRlYS03YjIwLTQwNWUtODZhYy1iY2NmOTRkNzM0OTciLSJzdWIiOiJhbm9ueW1v dXMiLYJleHAiOjJ2MzMyOTU5NDV1.VSUbnFYFwNVld46VwRbHWuvL3yCnfLGIIYrlu_gunR4cGqQFKKUqYUYDkvKxreLNLaL7R7ZkKtPFCF9J daP4JQ

Типа токена и алгоритма хэширования подписи
Payload — нагрузка (JSON). Нужные Вам данные
Подпись
1
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 10
04.10.2021, 16:02  [ТС] 12
Да, пока делаю в Гугл Таблицах, удобно - всегда доступно с любого устройства, спасибо за наводку)

Ваш код на получение токена запустил, сделал вывод в отдельную ячейку, но не могу подставить токен в запрос Authorization, сервер возвращает ошибку 401 и ссылается на строку
Javascript
1
let request = UrlFetchApp.fetch('https://pub.fsa.gov.ru/api/v1/rds/common' + $endpoint, parameters);
пробовал и читать токен из ячейки, и подставлять его Authorization: getAuth0(), присваивал через let переменную и подсовывал в Authorization, все ведет на 401, ошибку авторизации... При чем return со всеми выше перечисленными аргументами выводит токен в таблицу нормально

Где я ошибся? )
0
960 / 522 / 244
Регистрация: 20.05.2015
Сообщений: 774
04.10.2021, 17:08 13
Arsenich, да тут я сам скорее всего ошибся. Мои знания GAS не такие и обширные. Что-то я переборщил с передачей двух аргументов. Насколько я понял, таблицы этого не понимают.

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

Javascript
1
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("K23").getValues(); // вернем значение ячейки K23
В функцию getAuth0() можете добавить функционал, для отображения в соседней ячейке — когда и во сколько был получен токен.
0
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 10
04.10.2021, 17:23  [ТС] 14
Не, видимо я не так выразился)
Токен я беру целиком, не разбирая его при помощи GAS. Но вставить его в скрипт, в поле Authorization: Bearing то ли не могу, то ли еще что-то происходит, в следствии чего скрипт не может авторизоваться и получить ответ.

Пробовал прописывать его такими способами:
Authorization: getAuth0()
Authorization: token (заранее объявляя его let token = getAuth0() )
так же getAuth0 выводил в ячейку, в которой вылезал токен и через let назначал его, указывая из какой ячейки его брать

Javascript
1
2
3
4
var sheet = SpreadsheetApp.getActive().getSheets()[0];
var cell = sheet.getRange (1, 1) .getValue ( ) ;
.......
Authorization: cell
0
960 / 522 / 244
Регистрация: 20.05.2015
Сообщений: 774
04.10.2021, 17:59 15
Arsenich, ну. Это странно. Сейчас просто тестово запустил с Вашим кодом. Переменной call. Ячейка A1. Получил ответ от сервера.

А Вы точно обращаетесь к нужной ячейке? Проверяли ее содержимое через консоль?

Javascript
1
2
3
4
var sheet = SpreadsheetApp.getActive().getSheets()[0];
var cell = sheet.getRange(1, 1).getValue();
 
Logger.log(cell);
0
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 10
04.10.2021, 18:09  [ТС] 16
Да, все правильно было, посмотрел лог параметров, оказалось что он подставляет дополнительные кавычки в токен. Убрал кавычки, и все заработало.
Только от ошибок это не избавило... может какой-то таймаут запросов сделать...
0
960 / 522 / 244
Регистрация: 20.05.2015
Сообщений: 774
04.10.2021, 18:34 17
Arsenich, а как у Вас происходит выполнение функции? Вы выделяете активный диапазон деклараций и выполняете функцию. Она через, допустим for отправляет запросы и выводит результат для каждой ячейки.

Или, например, в левом столбце у Вас номер декларации, в соседнем справа вызов функции. =checkCertificate(ячейка). И Вы методом «перетаскивания» заполните столбец?

Просто замечу, что это два абсолютно разных метода вызова. При втором варианте. Ошибки практически никогда не выпадают.

Хотя, неизвестно количество обрабатываемой Вами информации.

Цитата Сообщение от Arsenich Посмотреть сообщение
может какой-то таймаут запросов сделать...
У GAS есть функция sleep()

Javascript
1
Utilities.sleep(2000); // 2 сек.
Миниатюры
GET запрос на сайт fsa.gov.ru и получение ответа в LibreOffice Calc  
0
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 10
04.10.2021, 18:40  [ТС] 18
Второй вариант, возможно еще проблема со стороны реестра, сайт жутко лагает постоянно.
Наверное лучшим вариантом будет проверка ответа и перезапуск скрипта до получения нужного результата.
1
04.10.2021, 18:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2021, 18:40
Помогаю со студенческими работами здесь

Получение ответа на POST запрос
Привет ребят. Чет совсем завис. Отправляю Post запрос. public string http_post(string url,...

Получение ответа на ajax запрос
Не могу получить ответа к свой же аякс запрос. Запрос посылаю из отдельного файла на сервер...

Отправка Post запроса на сайт и получение ответа
Здравствуйте. Помогите решить такую проблему: есть сайт на котором всего одно поле для ввода. в...

Post запрос к серверу и получение ответа
Здравствуйте, мне нужно, чтобы программа отправляла запрос серверу, получала данные в виде строки и...

Получение изображения капчи из ответа на запрос
Пишу API библиотеку для одного сайта на заказ. В обще, захожу на страницу регистрации. Там...

GET запрос VBA с листа и получение ответа
Доброго дня Форумчяне)) Стоит следующая задача, реализовать удалось частично, get запрос уходит,...

LibreOffice Calc
Есть ли аналог Worksheet_Activate для LibreOffice Calc? Надо выполнить макрос при активации...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru