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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8066
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

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

Сообщение Игорь Столяров »

Конкретно в этом случае, проблема в том, что кодировать для Diadoc нужно только одно значение параметра с русскими буквами.
А применение Urlencode (ну или printf('%u',ParamStr)) ко всей строке параметров закодирует и другие спецсимволы. :shock:
Тут мало того, что у всех участников этого действия тараканы, так они ещё и разные. :D
Последний раз редактировалось Игорь Столяров 28 Июнь 2025, 19:13, всего редактировалось 1 раз.
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8066
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

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

Сообщение Игорь Столяров »

finsoftrz писал(а): 28 Июнь 2025, 18:23 Мне кажется, я сильно модней
Даже не сомневаюсь в этом. И ещё покупаете современные сервера для использование технологий.
Но потом стартуете на нём десятки раз внешний EXE, c новой авторизацией на REST сервисе для каждой
операции и записью результата в текстовые файлы, с их последующей загрузкой для парса ... 🤦‍♀️

Невольно напрашивается мой любимый вопрос. А нафига ? :D
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5283
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 65 раз

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

Сообщение finsoftrz »

Дед Пахом писал(а): 28 Июнь 2025, 18:45 Надо --data-urlencode value1=ЙЦУКЕНГ без кодировки.
Проверял, не работает. Ни в ansi, ни в utf8. Почему, хз. На выходе все равно получается стандартный urlencode, который почему-то некорректно передается в сервис. К слову, в postmen есть возможность конвертации запросов в синтаксис curl. И он тоже дает аналогичный код с параметром в urlencode вида function=%D0%A1%D0%A7%D0%A4%D0%94%D0%9E%D0%9F
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5283
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 65 раз

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

Сообщение finsoftrz »

Игорь Столяров писал(а): 28 Июнь 2025, 19:02 Конкретно в этом случае, проблема в том, что кодировать для Diadoc нужно только одно значение параметра с русскими буквами.
А применение Urlencode (ну или printf('%u',ParamStr)) ко всей строке параметров закодирует и другие спецсимволы. :shock:
Тут мало того, что у всех участников этого действия тараканы, так они ещё и разные. :D
Разумеется, кодируется только значение (слово СЧФДОП).
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5283
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 65 раз

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

Сообщение finsoftrz »

Игорь Столяров писал(а): 28 Июнь 2025, 19:11
finsoftrz писал(а): 28 Июнь 2025, 18:23 Мне кажется, я сильно модней
Даже не сомневаюсь в этом. И ещё покупаете современные сервера для использование технологий.
Но потом стартуете на нём десятки раз внешний EXE, c новой авторизацией на REST сервисе для каждой
операции и записью результата в текстовые файлы, с их последующей загрузкой для парса ... 🤦‍♀️

Невольно напрашивается мой любимый вопрос. А нафига ? :D
Авторизация в любом случае выполняется при каждом запросе к сервису. Стартовать внешний exe в виде процесса не такая затратная операция, дернуть 500кб из кеша. Создание временных файлов тоже, они маленькие. Сколько временных файлов создает винда, не задумывались? Я понимаю, что без файлов более экономично. Нафига - это проще и быстрее при отладке и сопровождении. Не надо думать, что пользователи только и делают, что обращаются к внешним серверам. У них это занимает, может, долю процента рабочего времени. Если это была бы не вспомогательная задача, то я бы подумал об оптимизации и использовании библиотеки.
C6/C12, ШВС, tps/btrieve.
PavelNK
Старожил
Сообщения: 280
Зарегистрирован: 15 Март 2011, 8:02

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

Сообщение PavelNK »

А если Fiddler'ом посмотреть, что реально улетает на портал
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8066
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

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

Сообщение Игорь Столяров »

finsoftrz писал(а): 28 Июнь 2025, 19:30 Авторизация в любом случае выполняется при каждом запросе к сервису.
Не хотелось бы Вас огорчать в день такого великого достижения ... но нет.
Авторизация выполняется разово и далее уже идёт обмена GET / PUT и т.д.

Тут даже не вопрос о том, что это ресурсозатратно, купите ещё один сервер.
Когда Вы с одного IP адреса инициируете долбёжку REST авторизациями - он
начинает отвечать через time-out избегая перегрузки DOS атакой.
finsoftrz писал(а): 28 Июнь 2025, 19:30 Нафига - это проще и быстрее при отладке и сопровождении.
В чём проще ? Я сегодня за два часа получил список параметров и ответ сервиса,
с которым неработал несколько лет. Половина времени ушла на поиск и чтение справки.
А сопровождение текстовых строк запуска c параметрами будет через год супер-квестом. 🤦‍♀️
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5283
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 65 раз

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

Сообщение finsoftrz »

Игорь Столяров писал(а): 28 Июнь 2025, 20:34
finsoftrz писал(а): 28 Июнь 2025, 19:30 Авторизация в любом случае выполняется при каждом запросе к сервису.
Не хотелось бы Вас огорчать в день такого великого достижения ... но нет.
Авторизация выполняется разово и далее уже идёт обмена GET / PUT и т.д.

Тут даже не вопрос о том, что это ресурсозатратно, купите ещё один сервер.
Когда Вы с одного IP адреса инициируете долбёжку REST авторизациями - он
начинает отвечать через time-out избегая перегрузки DOS атакой.
finsoftrz писал(а): 28 Июнь 2025, 19:30 Нафига - это проще и быстрее при отладке и сопровождении.
В чём проще ? Я сегодня за два часа получил список параметров и ответ сервиса,
с которым неработал несколько лет. Половина времени ушла на поиск и чтение справки.
А сопровождение текстовых строк запуска c параметрами будет через год супер-квестом. 🤦‍♀️
Не хочу дискутировать, так как плохо понимаю, про что Вы пишите. :shock:
Два часа это очень много. Я все не мог понять, что Вы так упорно не хотите провести простой тест, думал, минут 10-15 от силы займет. В таком случае, вдвойне спасибо за приложенные усилия, не хотел так напрягать.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5283
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 65 раз

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

Сообщение finsoftrz »

Подумал, что, возможно, влияет какая-то установка в header. Поскольку странно, что задокументированная опция --data-urlencode не срабатывает.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3297
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 50 раз
Контактная информация:

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

Сообщение Дед Пахом »

Проверил на тестовом сервере, всё работает.
Запрос:
curl -X POST -G "https://echo.free.beeceptor.com" --data-urlencode "param1=value 1" --data-urlencode "param2=ЙЦУКЕНГ"
Ответ:
{
"method": "POST",
"protocol": "https",
"host": "echo.free.beeceptor.com",
"path": "/?param1=value+1&param2=%d0%99%d0%a6%d0%a3%d0%9a%d0%95%d0%9d%d0%93",
"ip": "86.122.441.8:00877",
"headers": {
"Host": "echo.free.beeceptor.com",
"User-Agent": "curl/8.13.0",
"Content-Length": "0",
"Accept": "*/*",
"Accept-Encoding": "gzip"
},
"parsedQueryParams": {
"param1": "value 1",
"param2": "ЙЦУКЕНГ"
},
"rawBody": "",
"warnings": [
"Missing Content-Type header for the POST request."
]
}
С уважением, ДП
Ответить