Имя: Пароль:
1C
1C 7.7
v7: Чтение веб страницы
0 uno-group
 
16.08.16
10:59
Не пойму под 1 юзерами работает под другими вроде как работает но возвращает 1 и тоже считаное в первый раз. вин 2003 сервак


//*******************************************

// функция стрПолучитьСтраницу(стрИсточник, олеАДО, олеХМЛ, олеШелл)

//

// Параметры:

//  стрИсточник - строка содержащая URL страницы

//  олеАДО      - OLE объект ADODDB Stream

//  олеХМЛ      - OLE объект XMLHttpReques

//  олеШелл     - OLE объект для управления скриптами

//

// Возвращаемое значение:

//  Многострочная строка содержащая исходный код страницы

//  в кондировке win1251

//

// Описание:

//  Функция считывает из интернета страницу и декодирует ее из

//  формата UTF-8 в win1251

//

функция стрПолучитьСтраницу(стрИсточник, олеАДО, олеХМЛ, олеШелл)

    Ответ = "";

    // сгенирим имя файла для временного хранения содержимого страницы

    стрИмяФайла = каталогИБ() + "1.txt";

    // отправим запрос для обработки серверу

    олеХМЛ.Open("GET", стрИсточник, 0);

    попытка

        // пробуем получить страничку

        олеХМЛ.Send();

    исключение

        // не взлетело... либо нет тырнета, либо УРЛ страницы не верен

        стрТекстОшибки = "Не удалось получить информацию от запрашиваемого узла" + разделительстрок;

        стрТекстОшибки = стрТекстОшибки + "Либо нет доступа в интерент, либо данный ресурс не доступен!";

        предупреждение(стрТекстОшибки);

        возврат Ответ;

    конецпопытки;

    // зададим тип и режим потока

    олеАДО.Mode = 3;

    олеАДО.Type = 1;

    // откроем его

    олеАДО.Open();

    // с помощью скрипта запишем в поток ADO данные из

    // объекта XMLHttpRequest

    // то есть содержимое страницы

    олеШелл.Eval("oleADO.Write(oleXML.ResponseBody)");

    // запишем данные во временный файл

    олеАДО.SaveToFile(стрИмяФайла, 2);

    // закроем данный поток

    олеАДО.Close();

    // для ускорения парсера занесем весь файл в строковую

    // переменую с разделителем строк

    // для этого инициализуруем поток установкой

    // соотвествующим режимом и типом

    олеАДО.Mode= 3;

    олеАДО.Type = 2;

    // так как страница в UTF-8

    олеАДО.CharSet="UTF-8";

    // откроем поток

    олеАДО.Open();

    // загрузим содержимое нашего файла в поток

    олеАДО.LoadFromFile(стрИмяФайла);

    // обнулим временную строковую переменную

    // в цикле получим из потока все строки

    пока олеАДО.EOS() = 0 цикл

        // и запишем их во временную переменую, добавив разделитель строк

        Ответ = Ответ + олеАДО.ReadText(-2) + разделительстрок;

    конеццикла;

    // закроем данный поток

    олеАДО.Close();

    // удалим временный файл

    фс.УдалитьФайл(стрИмяФайла);

    // вернем результат

    возврат Ответ;

конецфункции
//----------------------------------------------------------------------------
Процедура Сформировать()
    олеХМЛ = создатьобъект("Microsoft.XMLHTTP");

    // создадим \"поток\" через ADODDB для работы с данными

    олеАДО = создатьобъект("ADODB.Stream\");

    // создадим объект для управления скриптами

    олеШелл = создатьобъект("MSScriptControl.ScriptControl");

    // установим язык сценариев

    олеШелл.Language = "vbscript";

    // добавим созданные объекты

    олеШелл.AddObject("oleADO", олеАДО);

    олеШелл.AddObject("oleXML", олеХМЛ);

    // сперва дернем страницу с меню на русском языке

    стрУРЛа = "http://192.168.1.177";;

    стрТемп =  стрПолучитьСтраницу(стрУРЛа, олеАДО, олеХМЛ, олеШелл);
    сообщить(стрТемп);
    //*******************************************
КонецПроцедуры
1 uno-group
 
16.08.16
11:09
заметил такую закономерность если открыть ИЕ эту страницу и обновлять в 1с начинают поступать новые данные
2 Serginio1
 
16.08.16
11:46
Лучше использовать более продвинутые инструменты

v8: v8: Использование сборок .NET в 1С 7.x и 8.x
Использование классов .Net в 1С для новичков
.Net в 1С. Парсинг сайтов, multipart/form-data, gzip итд

Для семерки есть нюансы, которые описаны в примерах для семерки
3 uno-group
 
16.08.16
12:03
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"ExtForms\v7plus.dll");
Соединение= СоздатьОбъект("AddIn.V7HttpReader");
Соединение.ПолучитьКакФайл(стрУРЛа,"D:\price.txt");
попробывал через в7+ теже яйца только в профиль
пока в експлоере страницу необновишь даные неменяются
4 Юрий Лазаренко
 
16.08.16
12:04
(3) Ну так он из из кэша наверно тащит?
5 uno-group
 
16.08.16
13:36
вроде кеш оключил.
(2) не осилил на странице отображается 6 цифр через; мне надо получит эти цифры. чет как то все сильно мудрено
6 Юрий Лазаренко
 
16.08.16
13:37
(5) Ну если вы все равно OLE используете, так подключайтесь через OLE сразу к IE, грузите страницу в нем и читайте ее исходники.
7 Serginio1
 
16.08.16
14:14
(5) Прошу прощения. Не заметил вин 2003 сервак. Там есть компонента под .Net 2.0. Но раз не осилил значит не осилил.
На .Net 4
врап=новый COMОбъект("NetObjectToIDispatch45");
врап.УстЭтоСемерка();

    HttpClient=Врап.ПолучитьТипИзСборки("System.Net.Http.HttpClient","System.Net.Http.dll");

Клиент=Врап.СоздатьОбъект(HttpClient);
ДанныеРесурса=Клиент.GetStringAsync(стрИсточник).Result;

Сообщить(Врап.ВСтроку(ДанныеРесурса));
8 uno-group
 
16.08.16
14:18
(6) примет кода можно.
(7) неудачная попытка создать объет NetObjectToIDispatch45
9 lubitelxml
 
16.08.16
14:21
(8) обнови фреймворк до 4.5 версии
10 Serginio1
 
16.08.16
14:24
Конечно. Его нужно скачать и установить. Там в шапке ссылка Использование классов .Net в 1С для новичков
Но у тебя 2003 сервак там нужно устанавливать NetObjetToIDispatch и работать с WebRequest
https://msdn.microsoft.com/ru-ru/library/system.net.webrequest(v=vs.110).aspx
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс