Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Закрывается 1С при отправке POST запроса

v7: Закрывается 1С при отправке POST запроса
Я
   Ivan Bezdomnyi
 
27.02.20 - 08:33
Доброго времени суток.

Отправляю данные по товарам на сайт из 1С 7.7 методом POST. При этом если отправляю по 1000 товаров - все отправляется корректно. Но если пробую отправить все вместе 4000 товаров, то на моменте отправки 1С просто закрывается. В чем причина?

Текст такой:
WinHttp = СоздатьОбъект("Microsoft.XMLHTTP");
WinHttp.Open("POST","http://testtesttest.com/api/update_products",0);
WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","utf-8");
WinHttp.SetRequestHeader("Content-Language", "ru");
WinHttp.SetRequestHeader("Content-Charset", "utf-8");
WinHttp.SetRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
ПараметрыПОСТ = "data="+СтрОтправки;
WinHttp.Send(ПараметрыПОСТ);

C WinHttp.WinHttpRequest.5.1 то же самое.
   ДенисЧ
 
1 - 27.02.20 - 08:45
Память, разумеется.
   Ivan Bezdomnyi
 
2 - 27.02.20 - 09:16
(1) какая именно?
   Arbuz
 
3 - 27.02.20 - 12:33
в клюшках есть проблема с объёмом данный передаваемых в вк. при превышении некоего порога всё валится.
либо частями передавать, либо внешний скрипт который соберёт, модно - веб-сервис, который тоже соберёт по кусочкам и обработает, либо OLEExSup (OLEExSup :: ВызватьОЛЕМетод / InvokeOLEMethod) спасёт тебя.
   big
 
4 - 27.02.20 - 13:37
Пользуйте cUrl. Один раз сделал и забыл ))
   mishaPH
 
Модератор
5 - 27.02.20 - 13:38
(0) длинна строки запроса ограничена. отправляй несколько этапов
   victuan1
 
6 - 27.02.20 - 14:02
Отправляю из 1С 7.7 через msxml2.serverxmlhttp.6.0
Нет ограничений на размер файла у него в отличие хттп
У Курл тоже нет ограничений, им тоже норм.
   Arbuz
 
7 - 27.02.20 - 14:27
(4) у меня прям мечта - обернуть libcurl в com, но всё времени нет, а готового рабочего не нашёл
   Djelf
 
8 - 27.02.20 - 15:19
(7) Зачем в com? Можно и в ВК обернуть. Вот собранная curl1c.dll с примером http://catalog.mista.ru/public/1045311/
   Arbuz
 
9 - 27.02.20 - 15:51
(8) О! А как бы вк заиметь без см?
   trad
 
10 - 27.02.20 - 15:59
(7) если в ком завернешь, то получишь те же грабли с передачей в ком длинных строк.
Потому как в (0) это не проблема Microsoft.XMLHTTP, это проблема реализации взаимодействия 77 с ком.
А вот технология ВК, емнип, лишена этих недостатков
   Djelf
 
11 - 27.02.20 - 16:02
   mishaPH
 
Модератор
12 - 27.02.20 - 16:06
(6) у 1с 77 есть граничение на размер строки текста.. даже скл запросы прямые к другим системам валятся когда более опр колва символов
   trad
 
13 - 27.02.20 - 16:11
полуофф
Часто, при использовании Microsoft.XMLHTTP и т.п., и необходимости отправить/получить xml, забывают(не знают), что эти объекты умеют работать сразу с DOM и, почему-то, пытаются передать строку.
Хотя можно создать ДомДокумент, заполнить его и передать
WinHttp.Send(ДомДокумент);
   trad
 
14 - 27.02.20 - 16:13
(12) "у 1с 77 есть граничение на размер строки текста"
слишком широкое утверждение
   victuan1
 
15 - 27.02.20 - 19:47
(12) см. (13)
   Garykom
 
16 - 27.02.20 - 20:08
(13) Подскажи заодно нечто умеющее работать с JSON что можно аналогично подсунуть в WinHttp.Send(JSONДокумент);
Ну или как через WinHttp отправлять файлы с диска.
   trad
 
17 - 27.02.20 - 23:46
(16) через winhttp json - только строкой. Других способов не знаю.
А файл с диска, примерно так:

Файл = "d:\1.zip";
Stream = СоздатьОбъект("ADODB.Stream");
Stream.open();
Stream.loadFromFile(Файл);

Http = СоздатьОбъект("Msxml2.XMLHTTP");
Http.open("POST", Адрес, 0);
Http.setRequestHeader("Content-Type", "application/zip");
Http.setRequestHeader("Content-Disposition", "attachment; filename=""1.zip""");
Http.send(Stream);
   Garykom
 
18 - 28.02.20 - 00:00
(17) Угу или строку передать можно или поток.
А вот просто указать путь на диске к файлу содержимое которого надо отправить нет такого COMОбъект.

И не знаю COMОбъект который умел бы с JSON работать, за исключением через скрипты JScript или VBScript
   Garykom
 
19 - 28.02.20 - 00:01
(18)+ Короче странно это что никто не озадачился.
Вероятно COM потому что устаревшая технология и нефик вам новых плюшек.
   big
 
20 - 28.02.20 - 07:26
(7) Ну, я от незнания просто файлы гоняю ))
(11) Спасибо большое! )
   trad
 
21 - 28.02.20 - 09:26
(19) "Вероятно COM потому что устаревшая"
именно
   Garykom
 
22 - 28.02.20 - 09:30
(21) Проблема что 77 еще встречается и данные из нее надо как то выцеплять для переноса в новую конфу.
Привык уже через JSON переносы делать, это оказывается очень удобно и через HTTP сервисы.
   Garykom
 
23 - 28.02.20 - 09:31
(22)+ У меня код на 1С 7.7 для работы с JSON наваян через СоздатьОбъект("Текст") но это не сильно шустро.
   victuan1
 
24 - 28.02.20 - 13:57
Вот мне тоже эта тема интересна.
   Salimbek
 
25 - 28.02.20 - 14:02
(23) Переделай на работу с BinaryData - он гораздо шустрее. Были сравнительные тесты...
   Garykom
 
26 - 28.02.20 - 16:03
(25) "ADODB.Stream" достаточно шустро работает и умеет писать файлы.
Не вижу смысла тащит ВК когда "ADODB.Stream" с высокой вероятностью уже там есть на компе.
   Salimbek
 
27 - 28.02.20 - 21:19
(26) Ну если 1С++ еще не используется, то можно и через АДО
   user100000
 
28 - 08.03.20 - 01:26
Функция _Отправить(Адр,Логин,Пароль,з) Экспорт
    д=СоздатьОбъект("Msxml2.DOMDocument.6.0");
    Попытка
        //WinHttp=СоздатьОбъект("MSXML2.XMLHTTP");

        WinHttp=СоздатьОбъект("msxml2.serverxmlhttp.6.0");
        WinHttp.Open("POST",Адр,0,Логин,Пароль); 
        WinHttp.SetRequestHeader("Content-Type", "text/xml;charset=utf-8");
        WinHttp.Send(з);
        Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
        Скрипт.language="vbscript";
        ТекстСкрипта="
        |function LoadXML()
        |    objXML.loadXML WinHttp.ResponseText
        |end function";
        Скрипт.addObject("WinHttp",WinHttp);
        Скрипт.addObject("objXML",д);
        Скрипт.addCode(текстскрипта);
        Скрипт.run("LoadXML");
        WinHttp="";Скрипт="";    
    Исключение       
        //глЛогРег(ОписаниеОшибки()); 

        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Возврат д;
КонецФункции


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.