Имя: Пароль:
1C
1C 7.7
v7: Curl1C
0 alyuev
 
16.08.24
18:36
Есть POST запрос, который выполняется строкой

Запрос1="curl --request POST --url """+АдресЗапроса+""" --header """+Хеадер1+""" --data """+Данные+""" -o """+РезФайл+"""";
КомандаСистемы(Запрос1); //тут на выходе РезФайл, как и ожидали

Хочу переделать на Карлика, но он не отрабатывает. В РезФайл возвращает текст ошибки (от сервера)

	ЗагрузитьВнешнююКомпоненту("curl1c.dll");
	Карлик = СоздатьОбъект("Карлик");
	Приемник = Карлик.Приемник;
	Приемник.Тип = 1;	//Файл
	Приемник.Данные =РезФайл;
	Карлик.УстановитьПараметр("URL",АдресЗапроса);
	Карлик.УстановитьПараметр("CUSTOMREQUEST","POST");
	Карлик.УстановитьПараметр("HTTPHEADER",Хеадер1);
	Карлик.Источник.Данные=""""+Данные+"""";
	КодВозврата = Карлик.Выполнить();


КодВозврата = 422!

Я что-то не так делаю?
1 MWWRuza
 
16.08.24
19:21
Что в хидер1 - ?

Я вот так устанавливаю заголовки:

    Если ПустоеЗначение(сзЗаголовки) = 0 Тогда
        СчЦикла = 0;
        Для СчЦикла = 1 По сзЗаголовки.РазмерСписка() Цикл
            ИмяЗаголовка = "";
            ЗначениеЗаголовка = сзЗаголовки.ПолучитьЗначение(СчЦикла,ИмяЗаголовка);
            Если (ПустоеЗначение(ИмяЗаголовка) = 0) И (ПустоеЗначение(ЗначениеЗаголовка) = 0) Тогда
                Карлик.УстановитьПараметр("HTTPHEADER", ИмяЗаголовка +": "+ ЗначениеЗаголовка);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

И тут:
Приемник.Данные =РезФайл;
Я чего-то не понял...

И тут:
Приемник = Карлик.Приемник;
Приемник.Тип = 1;    //Файл

Чтото не понятное... По идее, должно быть:
Карлик.Приемник.Тип = 1;    //Файл

Приемник - это то, что в результате запроса с сервера прилетает:
После Выполнить() должно быть:

РезФайл = Карлик.Приемник.Данные;
2 MWWRuza
 
16.08.24
19:03
Если не в этом дело, могу весь запрос работающий выложить, если интересно... Но, там у меня "черт ногу сломит", лишнего(ну, не совсем - для моих задач нужного) много...
3 MWWRuza
 
16.08.24
19:14
И в данных у Вас что?

У меня так:
Карлик.Источник.Тип    = 0;
Карлик.Источник.Данные     = ТелоЗапр;

Тело запроса в данном случае строка JSON... Что-то у Вас кавычек много, на первый взгляд...
Покажите, что это за строка такая.
4 Djelf
 
16.08.24
19:43
Слишком много данных...
Карлик.Источник.Данные=""""+Данные+"""";
Ковычки то там зачем?
Я могу их вырезать, нормализировать строку... потом... но это будет не очень корректно.
5 alyuev
 
19.08.24
11:42
1) Я, вообще говоря, упростил формулировку. Т.к. по факту у меня 2 хедера и я использую 2 переменные.

Если это важно, какие именно, то вот они:

Хеадер1="Content-Type: application/json";
Хеадер2="xi-api-key: ИтутСобственноСамАпиКей";
Карлик.УстановитьПараметр("HTTPHEADER",Хеадер1);
Карлик.УстановитьПараметр("HTTPHEADER",Хеадер2);


2) Далее "Приемник.Данные =РезФайл;" - я тут просто обобщил. По факту у меня там имя путь к результирующему файлу

Приемник.Данные ="S:\output.txt";

3) В источник я тоже передаю JSON. То, что кавычек много - это уже требование API такое. Тип не устанавливаю принудительно.

    Данные  = """{\""text\"": \""Hello \"", \""voice_settings\"": {\""stability\"": 0.5,\""similarity_boost\"": 0.75},\""model_id\"": \""eleven_multilingual_v2\""}""";

//Карлик.Источник.Тип = 0;
Карлик.Источник.Данные=Данные;


________________

По сути просто перенес значения параметров из РАБОЧЕЙ строки запроса (который выполняется через командную строку) в параметры Карлика. Но не взлетело.
6 alyuev
 
19.08.24
11:45
API используется это: https://elevenlabs.io/docs/api-reference/text-to-speech
7 smitti911
 
19.08.24
14:28
Здравствуйте, только начал использовать Карлик (спасибо автору за труд).Есть ли какая-нибудь документация по данной длл? Пока все подсматриваю в архиве curl1c_1.0.0.16, в тестовом примере.
Задача получать данные из системы мониторинга Wialon, некоторые запросы уже написал и все работает, но есть пара вопросов:
1) Карлик.УстановитьПараметр("URL",АдресЗапроса);
Если АдресЗапроса в одну строку - все ок,  если сделать с переводом строки, для компактности и лутшей читаемости - получаю: КодОшибки = Карлик.Выполнить();Ошибка получения данных 3 0 . Приходится писать конструкции типа АдресЗапроса = АдресЗапроса +"
Но вдруг строка УРЛ будет слишком длинная, как тогда обойти  этот момент.
Пока максимум : АдресЗапроса ="https://hst-api.wialon.com/wialon/ajax.html?svc=core/search_items¶ms={""spec"":{""itemsType"":""avl_resource"",""propName"":""sys_name"",""propValueMask"":""*"",""sortType"":""sys_name"",""propType"":""drivers""},""force"":1,""flags"":256,""from"":0 ,""to"":0}&sid="+СокрЛП(СИД);
Но это только начало работ...
8 MWWRuza
 
19.08.24
17:19
(7) Но вдруг строка УРЛ будет слишком длинная, как тогда обойти  этот момент.

А при чем тут вообще карлик?
Обычная работа со строками... Что мешает сделать:

АдресЗапроса = СтрЗаменить(АдресЗапроса, Симв(10), "");
АдресЗапроса = СтрЗаменить(АдресЗапроса, Симв(13), "");

Этим мы просто "вырежем" переводы строки из строки УРЛ, сколько бы их не было изначально...
Или я не правильно понял Вашу задачу?
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.