|   |   | 
| 
 | v7: Закрывается 1С при отправке POST запроса | ☑ | ||
|---|---|---|---|---|
| 0
    
        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 | 
        Память, разумеется.     | |||
| 2
    
        Ivan Bezdomnyi 27.02.20✎ 09:16 | 
        (1) какая именно?     | |||
| 3
    
        Arbuz 27.02.20✎ 12:33 | 
        в клюшках есть проблема с объёмом данный передаваемых в вк. при превышении некоего порога всё валится.
 либо частями передавать, либо внешний скрипт который соберёт, модно - веб-сервис, который тоже соберёт по кусочкам и обработает, либо OLEExSup (OLEExSup :: ВызватьОЛЕМетод / InvokeOLEMethod) спасёт тебя. | |||
| 4
    
        big 27.02.20✎ 13:37 | 
        Пользуйте cUrl. Один раз сделал и забыл ))     | |||
| 5
    
        mishaPH модератор 27.02.20✎ 13:38 | 
        (0) длинна строки запроса ограничена. отправляй несколько этапов     | |||
| 6
    
        victuan1 27.02.20✎ 14:02 | 
        Отправляю из 1С 7.7 через msxml2.serverxmlhttp.6.0
 Нет ограничений на размер файла у него в отличие хттп У Курл тоже нет ограничений, им тоже норм. | |||
| 7
    
        Arbuz 27.02.20✎ 14:27 | 
        (4) у меня прям мечта - обернуть libcurl в com, но всё времени нет, а готового рабочего не нашёл     | |||
| 8
    
        Djelf 27.02.20✎ 15:19 | 
        (7) Зачем в com? Можно и в ВК обернуть. Вот собранная curl1c.dll с примером http://catalog.mista.ru/public/1045311/     | |||
| 9
    
        Arbuz 27.02.20✎ 15:51 | 
        (8) О! А как бы вк заиметь без см?     | |||
| 10
    
        trad 27.02.20✎ 15:59 | 
        (7) если в ком завернешь, то получишь те же грабли с передачей в ком длинных строк.
 Потому как в (0) это не проблема Microsoft.XMLHTTP, это проблема реализации взаимодействия 77 с ком. А вот технология ВК, емнип, лишена этих недостатков | |||
| 11
    
        Djelf 27.02.20✎ 16:02 | 
        (9) Забирай https://cloud.mail.ru/public/qZzr/fnAN4SHAa     | |||
| 12
    
        mishaPH модератор 27.02.20✎ 16:06 | 
        (6) у 1с 77 есть граничение на размер строки текста.. даже скл запросы прямые к другим системам валятся когда более опр колва символов     | |||
| 13
    
        trad 27.02.20✎ 16:11 | 
        полуофф
 Часто, при использовании Microsoft.XMLHTTP и т.п., и необходимости отправить/получить xml, забывают(не знают), что эти объекты умеют работать сразу с DOM и, почему-то, пытаются передать строку. Хотя можно создать ДомДокумент, заполнить его и передать WinHttp.Send(ДомДокумент); | |||
| 14
    
        trad 27.02.20✎ 16:13 | 
        (12) "у 1с 77 есть граничение на размер строки текста"
 слишком широкое утверждение | |||
| 15
    
        victuan1 27.02.20✎ 19:47 | 
        (12) см. (13)     | |||
| 16
    
        Garykom гуру 27.02.20✎ 20:08 | 
        (13) Подскажи заодно нечто умеющее работать с JSON что можно аналогично подсунуть в WinHttp.Send(JSONДокумент);
 Ну или как через WinHttp отправлять файлы с диска. | |||
| 17
    
        trad 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); | |||
| 18
    
        Garykom гуру 28.02.20✎ 00:00 | 
        (17) Угу или строку передать можно или поток.
 А вот просто указать путь на диске к файлу содержимое которого надо отправить нет такого COMОбъект. И не знаю COMОбъект который умел бы с JSON работать, за исключением через скрипты JScript или VBScript | |||
| 19
    
        Garykom гуру 28.02.20✎ 00:01 | 
        (18)+ Короче странно это что никто не озадачился.
 Вероятно COM потому что устаревшая технология и нефик вам новых плюшек. | |||
| 20
    
        big 28.02.20✎ 07:26 | 
        (7) Ну, я от незнания просто файлы гоняю )) 
 (11) Спасибо большое! ) | |||
| 21
    
        trad 28.02.20✎ 09:26 | 
        (19) "Вероятно COM потому что устаревшая"
 именно | |||
| 22
    
        Garykom гуру 28.02.20✎ 09:30 | 
        (21) Проблема что 77 еще встречается и данные из нее надо как то выцеплять для переноса в новую конфу.
 Привык уже через JSON переносы делать, это оказывается очень удобно и через HTTP сервисы. | |||
| 23
    
        Garykom гуру 28.02.20✎ 09:31 | 
        (22)+ У меня код на 1С 7.7 для работы с JSON наваян через СоздатьОбъект("Текст") но это не сильно шустро.     | |||
| 24
    
        victuan1 28.02.20✎ 13:57 | 
        Вот мне тоже эта тема интересна.     | |||
| 25
    
        Salimbek 28.02.20✎ 14:02 | 
        (23) Переделай на работу с BinaryData - он гораздо шустрее. Были сравнительные тесты...     | |||
| 26
    
        Garykom гуру 28.02.20✎ 16:03 | 
        (25) "ADODB.Stream" достаточно шустро работает и умеет писать файлы.
 Не вижу смысла тащит ВК когда "ADODB.Stream" с высокой вероятностью уже там есть на компе. | |||
| 27
    
        Salimbek 28.02.20✎ 21:19 | 
        (26) Ну если 1С++ еще не используется, то можно и через АДО     | |||
| 28
    
        user100000 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="";Скрипт=""; Исключение //глЛогРег(ОписаниеОшибки()); Сообщить(ОписаниеОшибки()); КонецПопытки; Возврат д; КонецФункции | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |