Страница 3 из 5

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 21:50
Игорь Столяров
finsoftrz писал(а): 27 Июнь 2025, 21:40 Они не правы в том, что сервис не умеет декодировать urlencode.
Немного не так.
Вы в командной стоке передаёте значение в UTF-8 и кодируете его т.н. urlencode.
CURL.EXE должен декодировать командную строку и передать сервису значение просто в UTF-8
(как это делается при вызове REST API из LibCurl).

REST сервис Diadoс ничего не знает об "urlencode" и знать не должен.
urlencode - это способ передать "неанглийские и непечатные" символы из командной строки в CURL.EXE

Насчёт платной техподдержки - cогласен, не очень понятно.
Разработчик должен платить за то, что загоняет в сервис пользователей, которые будут покупать подписку.
Пипец ! 🤦‍♀️

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 22:00
finsoftrz
Curl.exe сам по себе ничего не делает. Он просто передает значения из командной строки в curlib. Еще раз, я практически не сомневаюсь, что у Вас при работе из curlib будет аналогичная проблема.

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 22:05
finsoftrz
Игорь Столяров писал(а): 27 Июнь 2025, 21:50 REST сервис Diadoс ничего не знает об "urlencode" и знать не должен.
urlencode - это способ передать "неанглийские и непечатные" символы из командной строки в CURL.EXE
Почему не должен? Кодирование в urlencode это общепринятый безопасный механизм передачи параметров в вебе. Utf8 не единственный формат в вебе, просто там так удобнее для унификации. Много сайтов, например, работают в windows кодировке.

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 22:15
Игорь Столяров
finsoftrz писал(а): 27 Июнь 2025, 22:00 Он просто передает значения из командной строки в curlib.
Да. Вот только записать строку в UTF-8 в командную строку не получается.
Пасаны решили, что нужно тогда применить "urlencode" ... это логично, но вовсе не факт.
Как минимум, хотелось бы увидеть какое-нибудь описание по передаче параметров в национальной кодировке.
finsoftrz писал(а): 27 Июнь 2025, 22:00 что у Вас при работе из curlib будет аналогичная проблема
Только потому что я тупой. Но если Вы повторите без измений запрос из POSTMAN в LibCurl - то проблем точно не будет. :D

И ещё CURL.EXE имеет массу сборок. Может быть у Вас какая-то без поддержки работы с национальными кодировками ?
Им там наши проблемы непонятны. Или сборка с докрымских времён ?

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 22:19
finsoftrz
Игорь Столяров писал(а): 27 Июнь 2025, 22:15
finsoftrz писал(а): 27 Июнь 2025, 22:00 Он просто передает значения из командной строки в curlib.
Да. Вот только записать строку в UTF-8 в командную строку не получается.
Пасаны решили, что нужно тогда применить "urlencode" ... это логично, но вовсе не факт.
Как минимум хотелось бы увидеть какое-нибудь описание по передаче параметром в национальной кодировке.
finsoftrz писал(а): 27 Июнь 2025, 22:00 что у Вас при работе из curlib будет аналогичная проблема
Только потому что я тупой. Но если Вы повторите без измений запрос из POSTMAN в LibCurl - то проблем не будет. :D

И ещё CURL.EXE имеет массу сборок. Может быть у Вас какая-то без поддержки работы с национальными кодировками ?
Им там наши проблемы непонятны. Или сборка с докрымских времён ?
Игорь, не надо ничего придумывать. Это общеизвестный вопрос, открываете интернет и гуглите.
Предложение попробовать запрос из curlib в силе, если есть желание.

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 22:26
Игорь Столяров
finsoftrz писал(а): 27 Июнь 2025, 22:19 открываете интернет и гуглите
В смысле ? Что гуглить ? Как передать параметры UTF-8 в командной строке CURL.EXE ? Зачем ?
Да у меня CURL.EXE нет. И я не собираюсь никакой EXE запускать и парсить потом ответы в текстовых файлах ... :D

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 22:37
finsoftrz
Вы меня не слышите. Попробуйте погуглить curlib кириллица, например, или что-то подобное. Увидите обсуждение использования curlib на разных языках программирования (c++, php и тп).

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 22:53
Игорь Столяров
finsoftrz писал(а): 27 Июнь 2025, 22:37 Вы меня не слышите.
Пардон, но Вы сами себя не слышите. 🤷‍♀️

Вы работаете с оболочкой CURL.EXE которая распарсивает командную строку и далее передаёт параметры в LibCurl.
Работайте напрямую с LibCurl (например через прекрасный класс ДП) и у Вас не будет проблем c параметрами в UTF-8.
finsoftrz писал(а): 27 Июнь 2025, 22:37 Увидите обсуждение использования curlib на разных языках программирования (c++, php и тп).
Согласен. И кто-то там запускает с PHP CURL.EXE ? Уходите оттуда - это демоны ... :D

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 23:14
finsoftrz
Речи нет про curl.exe, везде про curlib.
Почему бы Вам самому не попробовать выполнить простой запрос через curlib? Мне это дольше делать, так как придётся изучать работу класса, а Вы с ним активно работаете.

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 23:48
Игорь Столяров
Я и привёл ниже фрагмент запроса где параметр с именем файла кодируется в UTF-8.
Можно попробовать передать русское наименование - не думаю, что дожны появиться проблемы.

Там же указано место для формирования запроса с передачей формализованного ЭДО документа.
Можете просто тупо указать Ваш запрос по описанию (как это сделал я для передачи файла документа).

Конкретно с DIADOC уже давно не работал. Я Вам рассказывал, что эта работа не получила продолжение.
Дорогая подписка на интеграцию. 🤷‍♀️ Но всё сделанное прекрасно работает.
finsoftrz писал(а): 27 Июнь 2025, 23:14 Речи нет про curl.exe, везде про curlib.
Вот и я о том же говорю ...

Передача кириллицы в http запросе через curl

Добавлено: 27 Июнь 2025, 23:58
finsoftrz
Ну так что, попробуем завтра на примере запроса xsd схемы? Там не нужно тело передавать, только несколько параметров в строке адреса, один кириллический. Если ответ будет, значит работает, нет, не работает. Я Вам на почту пришлю строку запроса с параметрами.

Передача кириллицы в http запросе через curl

Добавлено: 28 Июнь 2025, 0:24
Игорь Столяров
finsoftrz писал(а): 27 Июнь 2025, 23:58 Если ответ будет, значит работает, нет, не работает
Выполните в моём классе передачу файла с документом в ЛК - это точно работает.
Далее уже указывайте, что Вам нужно сделать.

Если что-то не получится - сбрасывайте пример, будем вместе смотреть в чём затык.

Передача кириллицы в http запросе через curl

Добавлено: 28 Июнь 2025, 8:25
Игорь Столяров
finsoftrz писал(а): 27 Июнь 2025, 23:58 на примере запроса xsd схемы
Я так понимаю, что речь идёт о функции GetContent().
Для неё нужно запросить список доступных в ящике типов документов:

Код: Выделить всё

! Получить список типов документов, доступных в ящике  
DiaDocClass.GetDocumentTypes Procedure(String xBoxId) !,Long   
Result        CurlCode
json          cJSONFactory
Root          &cJson

  Code
  If Self.PriorCurl('GET',Result)

     Self.ResponseBuffer.Kill   
     Result = Self.Curl.SendRequest('https://diadoc-api.kontur.ru/V2/GetDocumentTypes?boxId=' & xBoxId, Self.ResponseBuffer)
     Self.Debug('GetDocumentTypes_Response.json', Self.ResponseBuffer, CP_UTF8)  ! Запись протокола отладки

     If Self.CheckResponse(Result,'Ошибка метода GetDocumentTypes')

        Root &= json.Parse(Self.ResponseBuffer,CP_ACP)
        If Not (Root &= Null)
           Message(Root.ToString(True))
           Root.Delete()
        end
     end
  end
  Return Result
У меня в тестовом ящике гора какого мусора.
Но как я понимаю - для формализованных типов документов мы получаем данные для запроса XSD схемы:

1.jpg

Пробуйте - что у Вас покажет в ящике.
И вот дальше, уже вызываем GetContent() с передачей в него параметров из GetDocumentTypes().

Как я понимаю - у Вас проблема именно с передачей в GetContent() русского значения для параметра "function".
Но у меня для всех документов в ящике function=default (см. рисунок выше) .... 🤷‍♀️

Передача кириллицы в http запросе через curl

Добавлено: 28 Июнь 2025, 8:36
finsoftrz
Это видимо потому, что вы на тестовом контуре. Default только у invoice. Я поэтому и предложил дать реквизиты на чтение из рабочего. Да, речь про GetContent для проверки.

Передача кириллицы в http запросе через curl

Добавлено: 28 Июнь 2025, 8:41
finsoftrz
Причём могу дать сразу ссылку на xsd схему, чтобы не искать среди доступных документов в ящике. Вам останется выполнить эту ссылку.