Передача кириллицы в http запросе через curl
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8066
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Передача кириллицы в http запросе через curl
OK ! Я сейчас попробую сделать метод и хоть что-то получить из GetContent() по своей ссылке.
Должна же она что-то вернуть. Результат сообщу и покажу код метода. А Вы уже попробуете свои данные тогда.
Должна же она что-то вернуть. Результат сообщу и покажу код метода. А Вы уже попробуете свои данные тогда.
Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5283
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Передача кириллицы в http запросе через curl
С default работает. А с кириллическим названием ничего не возвращает.
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8066
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Передача кириллицы в http запросе через curl
Да. Это мы ещё вчера поняли - но Вы работаете через командную строку CURL.EXE
И так как Вам вилы самому сделать тест через вызов LibCurl - то это сделал я:
Код: Выделить всё
! Получить XSD-схему документа (тест)
DiaDocClass.GetContent Procedure(String sQueryPar) !,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' & sQueryPar, Self.ResponseBuffer)
Self.Debug('GetContent_Response.json', Self.ResponseBuffer, CP_UTF8) ! Запись протокола отладки
If Self.CheckResponse(Result,'Ошибка метода GetContent')
!Root &= json.Parse(Self.ResponseBuffer,CP_ACP) - не нужно, т.к. в ответе не JSON, а XSD !
!If Not (Root &= Null)
! Message(Root.ToString(True)) ! Здесь парсим ответ сервиса
! Root.Delete()
!end
end
end
Return Result
Дальше Игорь тупо делает Ваш запрос из первого сообщения (XSD схемы это ведь не конфеденциальные данные):
Код: Выделить всё
If xMyDia.GetContent('/GetContent?TypeNamedId=UniversalTransferDocument&function=' & printf('%u','СЧФДОП') & '&version=utd970_05_03_01&titleIndex=1&contentType=SignerUserContractXsd').

- Вложения
-
- xsd.txt
- (31.43 КБ) 19 скачиваний
Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5283
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Передача кириллицы в http запросе через curl
Можете указать полную строку запроса, с учётом результата printf? И какие значения установлены в заголовке запроса? Попробуйте ещё с titleIndex=0, чтобы было в ответе видно, что он именно на этот запрос.
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8066
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Передача кириллицы в http запросе через curl
Строку запроса Вам подсказывал KREATOR:
Но здесь наверно правильно искать значение между "&function=" и следующим "&" и конвертировать в RFC 1738.
Потому что все эти ручные перекодирования и "текстушки" рухнут при любом шаге сервиса в сторону ...
И мне кажется, что Вам уже можно переходить от общего руководства - непосредственно к работе.
Код: Выделить всё
If xMyDia.GetContent('/GetContent?TypeNamedId=UniversalTransferDocument&function=' & '%D0%A1%D0%A7%D0%A4%D0%94%D0%9E%D0%9F' & '&version=utd970_05_03_01&titleIndex=0&contentType=SignerUserContractXsd').
Потому что все эти ручные перекодирования и "текстушки" рухнут при любом шаге сервиса в сторону ...
Без проблем. Запрос как выше, ответ прикреплён к сообщению (я правда не понял, что изменилось).finsoftrz писал(а): 28 Июнь 2025, 11:32 Попробуйте ещё с titleIndex=0, чтобы было в ответе видно, что он именно на этот запрос.
И мне кажется, что Вам уже можно переходить от общего руководства - непосредственно к работе.

- Вложения
-
- xsd2.txt
- (31.43 КБ) 9 скачиваний
Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5283
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Передача кириллицы в http запросе через curl
Странно, это стандартное значение urlencode, у меня оно не работало. Игорь, а Вы точно уверены, что во вложении ответ на titleIndex=0? Там должна быть схема на упд, а это выглядит как схема на ответный титул покупателя.
В любом случае спасибо за усилия, перепроверю ещё раз. Хоть я и обошёл проблему, но выяснить до конца надо бы.
В любом случае спасибо за усилия, перепроверю ещё раз. Хоть я и обошёл проблему, но выяснить до конца надо бы.
C6/C12, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5283
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Передача кириллицы в http запросе через curl
По подписи так и должно быть, задан contentType=SignerUserContractXsd. Запросы идентичные с адресной строкой в ansi, а результат разный.
А какая у Вас версия curlib?
А какая у Вас версия curlib?
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8066
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Передача кириллицы в http запросе через curl
В предыдущем сообщении строка запроса и ответ сервиса на неё.
Для того, что бы как-то прокомментировать, что там должно быть или поддержать разговор - нужно уже смотреть описание.
Удачи Вам в этой работе !

Текущий комплект предлагаемый автором класса.
см. https://github.com/mikeduglas/libcurl/
Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5283
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Передача кириллицы в http запросе через curl
Уф, поймал наконец. Кто бы мог подумать...
Надо дублировать символ "%". То есть, вместо function=%D0%A1%D0%A7%D0%A4%D0%94%D0%9E%D0%9F писать function=%%D0%%A1%%D0%%A7%%D0%%A4%%D0%%94%%D0%%9E%%D0%%9F.
Надо дублировать символ "%". То есть, вместо function=%D0%A1%D0%A7%D0%A4%D0%94%D0%9E%D0%9F писать 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
То есть, Диадок тут действительно ни при чем, проблема была в синтаксисе командной строки curl. Причем в интернете информации не нашел. На мысль навело то, что при передаче с одинарным % сервис возвращает сообщение о значении, в котором символы приняты через один.
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8066
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Передача кириллицы в http запросе через curl
Ну в принципе, что-то в этом стиле и ожидалось.Игорь Столяров писал(а): 27 Июнь 2025, 21:35 Это вопрос к CURL.EXE. Кроме частичного перебора методом тыка, должно быть какое-то описание по передаче параметров
в национальной кодировке из командной строки ...

Записывайте где-нибудь эти тайные знания, Вам уже можно открывать лавку древностей Clarion.

Make Clarion Great Again ! 
- Дед Пахом
- Старичок
- Сообщения: 3296
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 50 раз
- Контактная информация:
Передача кириллицы в http запросе через curl
То есть надо добавить опцию -G, а параметры передавать отдельно, каждый с опцией -data-urlencode, тогда они добавятся в конец адреса после символа ?, разделённые символом &.The solution is to use the -G switch in combination with the --data-urlencode switch. Using the original example, the command would look like the following:
$ curl -X PUT -G 'http://example.com/resource/1' --data-urlencode 'param1=value 1' --data-urlencode param2=value2
The -G switch causes the parameters encoded with the --data-urlencode switches to be appended to the end of the http URL with a ? separator.
Взял здесь: https://stackoverflow.com/questions/329 ... n-http-put
С уважением, ДП
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5283
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Передача кириллицы в http запросе через curl
Причем тут лавка древностей? Мне кажется, я сильно модней, чем Вы, так как умею ip драйвер, anysceen, могу на ntws сбацать, могу на php.
Касаемо через чего работать, через curl.exe или curlib, по большому счету, принципиальной разницы нет, функционал идентичный. Через curl.exe точно проще, так как не нужна навороченная интерфейсная прослойка. Михаил в ней много сделал (я даже удивляюсь, как такой серьезный проект делается на шару), но если что, разбираться в сырцах не так просто будет, людей работает мало с ней. Плюс еще это работа с вебом и там достаточно быстро меняется. Что, если завтра некоторые вещи станут доступны только в 64 битах, менять концепцию? Это не только curlib касается. Если есть возможность использовать более простые и распространенные инструменты, то я предпочитаю их. Если будет достаточное обоснование использовать редкие библиотеки (тот же интерфейс к curlib), то буду смотреть в эту сторону. Например, anyscreen редкая вещь и работает не все там, но она дает принципиальную возможность обеспечить легкий интерфейс к данным основной системы через интернет, включая мобильные устройства, значит, увеличивает наши возможности и делает нас сильнее.

Касаемо через чего работать, через curl.exe или curlib, по большому счету, принципиальной разницы нет, функционал идентичный. Через curl.exe точно проще, так как не нужна навороченная интерфейсная прослойка. Михаил в ней много сделал (я даже удивляюсь, как такой серьезный проект делается на шару), но если что, разбираться в сырцах не так просто будет, людей работает мало с ней. Плюс еще это работа с вебом и там достаточно быстро меняется. Что, если завтра некоторые вещи станут доступны только в 64 битах, менять концепцию? Это не только curlib касается. Если есть возможность использовать более простые и распространенные инструменты, то я предпочитаю их. Если будет достаточное обоснование использовать редкие библиотеки (тот же интерфейс к curlib), то буду смотреть в эту сторону. Например, anyscreen редкая вещь и работает не все там, но она дает принципиальную возможность обеспечить легкий интерфейс к данным основной системы через интернет, включая мобильные устройства, значит, увеличивает наши возможности и делает нас сильнее.
C6/C12, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5283
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Передача кириллицы в http запросе через curl
Проверял, не работает. Это дает тот же результат, как напрямую подставить в параметр значение в urlencode. Помогло только дублирование символов % в нем.Дед Пахом писал(а): 28 Июнь 2025, 18:03То есть надо добавить опцию -G, а параметры передавать отдельно, каждый с опцией -data-urlencode, тогда они добавятся в конец адреса после символа ?, разделённые символом &.The solution is to use the -G switch in combination with the --data-urlencode switch. Using the original example, the command would look like the following:
$ curl -X PUT -G 'http://example.com/resource/1' --data-urlencode 'param1=value 1' --data-urlencode param2=value2
The -G switch causes the parameters encoded with the --data-urlencode switches to be appended to the end of the http URL with a ? separator.
Взял здесь: https://stackoverflow.com/questions/329 ... n-http-put
C6/C12, ШВС, tps/btrieve.
- Дед Пахом
- Старичок
- Сообщения: 3296
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 50 раз
- Контактная информация:
Передача кириллицы в http запросе через curl
Надо --data-urlencode value1=ЙЦУКЕНГ без кодировки.
С уважением, ДП