Имя: Пароль:
1C
1C 7.7
v7: Рабочий пример отправки файла json на сайт
0 Мимохожий Однако
 
25.05.21
12:48
Ищу рабочий пример отправки файла формата json.
1 Мимохожий Однако
 
25.05.21
12:49
1С:Предприятие 7.7
2 Мимохожий Однако
 
25.05.21
12:50
Чем можно проверить, что в результате отсылается на сайт?
3 Кирпич
 
25.05.21
12:54
(2) Послать на свой сайт и там принять. Такой вариант подойдет?
4 big
 
25.05.21
13:28
Что-то вроде этого:
curl.exe +" -X POST https://ismp.crpt.ru/api/v3/auth/cert/ -H ""content-type: application/json;charset=UTF-8"" --data-binary @"+ИмяФайлаИсходящий+" --output " + ФайлОтвета;

ИмяФайлаИсходящий - твой json с данными.

Это реальная командная строка для получения токена с Честного знака.

з.ы. если конечно там ничего не поменяли ))
5 fisher
 
25.05.21
13:33
(2) fiddler
(4) Курлом нещитово :)
6 big
 
25.05.21
13:38
(5) Чойта?? Очень рабочий вариант. Очень!


Начал переделывать на WinHTTP, но что-то боюсь будущих известных глюков ))
7 fisher
 
25.05.21
13:54
(6) Шутка юмора. Курл - универсальная отмычка.
А в 7.7 хоть так хоть эдак без внешних зависимостей не обойтись, так что вполне норм. Только и того, что библиотекой красивше чуток, что ли...
8 2mugik
 
25.05.21
14:33
(0)winHTTP а семерке нормально работало.
9 big
 
25.05.21
19:14
(8) При объеме получаемых данных более 150 кБ (или сколько там - точно не помню) 7-ка вешается наглухо. Я на ЕГАИС с этой багофичей столкнулся, пришлось очень быстро переделывать на курлу.
10 Мимохожий Однако
 
25.05.21
19:59
(8) Можно примерчик? )
11 tgu82
 
25.05.21
20:12
(10) Я и через curl  отправлял несколько лет а сейчас через ncftp
12 FN
 
26.05.21
10:45
Примерно так:
winhttp = СоздатьОбъект("winhttp.winhttprequest.5.1");
winhttp.Open(Метод,УРЛ);
...

СтримЧтение = СоздатьОбъект("ADODB.Stream");
СтримЧтение.Type = 1;
СтримЧтение.Mode = 3;
СтримЧтение.Charset = "UTF-8";
СтримЧтение.Open();

Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.Language = "VBScript";
Скрипт.Timeout=-1;
Скрипт.AddObject("StreamRead",СтримЧтение);
Скрипт.AddObject("winhttp",winhttp);
СтримЧтение.LoadFromFile(ИмяФайлаСЗапросом);

Если СтримЧтение.Type=1 Тогда
    Скрипт.Eval("winhttp.send(StreamRead.Read())");
Иначе
    Скрипт.Eval("winhttp.send(StreamRead.ReadText())");
КонецЕсли;
13 SiAl-chel
 
26.05.21
11:26
(12) Непонятно зачем создавать внутри 1С winhttprequest, чтобы потом его передавать в скрипт, выполняемый через MSScriptControl? Не проще ли в скрипте создать объект winhttprequest или уже в коде самой 1С оперировать объектом winhttprequest без всяких там MSScriptControl?
14 big
 
26.05.21
11:55
WinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"UTF-8");
WinHttp.SetTimeouts(10000,10000,10000,10000);

Если флПрокси<>0 Тогда
    ПрксСервер    = СокрЛП(ПроксиСервер);
    ПрксЮзер    = СокрЛП(ПроксиПользователь);
    ПрксПароль    = СокрЛП(ПроксиПароль);
    
    WinHttp.SetProxy(2,ПрксСервер);
КонецЕсли;

ТипЗапроса    = "GET";
АдресСервиса    = "https://ismp.crpt.ru/api/v3/auth/cert/key";
СпсЗаголовки    = СоздатьОбъект("СписокЗначений");
СпсЗаголовки.ДобавитьЗначение("application/json;charset=UTF-8","content-type");

Попытка
    WinHttp.Open(ТипЗапроса, АдресСервиса, 0);
    // 0 - для сервера, 1 - для прокси
    Если флПрокси<>0 Тогда
        WinHttp.SetCredentials(ПрксЮзер,ПрксПароль,1);
    КонецЕсли;
Исключение
    Сообщить("СоздатьОбъектWinHttp Ошибка при попытке установить соединение с "+АдресСервиса+": "+ОписаниеОшибки());
    Возврат 0;
КонецПопытки;

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

WinHttp.Send(ТекстДляОтправки);
ОтветСервиса    = WinHttp.ResponseText();
Если WinHttp.Status <> 200 Тогда // 200 - статус ОК
    Сообщить("Ошибка: "+WinHttp.Status + " - " + WinHttp.StatusText);
Иначе
    Сообщить("ОК");
КонецЕсли;


Красоту наводить не стал, всё и так понятно
15 FN
 
26.05.21
13:10
(13) Скрипт нужен что бы обойти проблему из (9)
Объекты проще создавать и управлять ими именно из кода 1С, чем делать все в скрипте. Скрипт нужен только что бы большой объем данных был обработан за пределами процесса 1Cv7.
16 Мимохожий Однако
 
26.05.21
13:52
(14) А можно пример POST-запроса?
или достаточно использовать строку
ТипЗапроса    = "POST";
вместо
ТипЗапроса    = "GET";
?
17 FN
 
26.05.21
15:55
(16) просто строка.
Пример запроса:

        СоединениеWinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
    СоединениеWinHttp.SetTimeouts(1000,2000,2000,2000);
    СоединениеWinHttp.Open("POST", "http://********.com/********.php", 0);
    СоединениеWinHttp.SetRequestHeader("Content-Type","multipart/form-data;charset=Windows-1251;boundary=" + Boundary);
    СоединениеWinHttp.SetRequestHeader("Content-Length", СтрДлина(ТекстЗапроса));
    Попытка
        СоединениеWinHttp.Send(ТекстЗапроса);
    Исключение
    КонецПопытки;
        Если СоединениеWinHttp.ResponseText="passed" Тогда
18 Мимохожий Однако
 
27.05.21
09:31
При открытии объекта СтримЧтение (ADODB.Stream)
выдал ошибку: Операция не допускается в данном контексте
Надо что-то зарегистрировать или права добавить? или что-то еще?
19 Мимохожий Однако
 
27.05.21
10:01
Ошибку победил. Причина в неправильном пути к файлу с текстом запроса.
AdBlock убивает бесплатный контент. 1Сергей