Сегодня речь пойдет о работе с сетью в 1С, использовать стандартные методы не будем, о них будет рассказ намного позже, а сегодня все будем делать при помощи встроенных в Windows объектов — WinHttpRequest и Stream (ADO).
Для начала инициализация.
1 2 | WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); //WinHttpRequest Stream = Новый COMОбъект("ADODB.Stream"); //Stream (ADO) |
После инициализации объекты готовы к работе.
WinHttpRequest
Сначала рассмотрим объект WinHttpRequest, подробную информацию по свойствам и методам можно почитать тут (на английском).
Перепечатывать справку не буду, хотя отмечу, что несмотря на английский, текст прост для понимания. Я же просто приведу несколько практических примеров.
Получение текста страницы методом GET:
1 2 3 4 5 6 7 8 | WinHttp.Open("GET", "http://google.com", Ложь); WinHttp.Send(); Если WinHttp.Status = 200 Тогда Сообщить(WinHttp.ResponseText); Иначе Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText); Возврат; КонецЕсли; |
В методе «Open» третий параметр (Ложь) отвечает за асинхронность запроса.
Отправка POST запроса:
1 2 3 4 5 6 7 8 | WinHttp.Open("POST", "http://yandex.ru/yandsearch", Ложь); WinHttp.Send("lr=5&text=test"); //передача POST-параметров Если WinHttp.Status = 200 Тогда Сообщить(WinHttp.ResponseText); Иначе Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText); Возврат; КонецЕсли; |
Устанавливаем прокси-сервер:
1 2 | WinHttp.SetProxy(2, "192.168.1.1:3128"); WinHttp.SetCredentials("ProxyLogin", "ProxyPassword", 1); |
Первый параметр метода «SetProxy» — тип прокси-сервиса;
Третий параметр метода «SetCredentials» — отметка о том, что логин и пароль устанавливаются именно для прокси-сервера.
Устанавливаем все необходимые заголовки (зависит от задачи):
1 2 3 4 5 | WinHttp.SetRequestHeader ("Accept-Language", "ru"); WinHttp.SetRequestHeader ("Accept-Charset", "Windows-1251"); WinHttp.setRequestHeader ("Content-Language", "ru"); WinHttp.setRequestHeader ("Content-Charset", "Windows-1251"); WinHttp.setRequestHeader ("Content-Type", "application / x-www-form-urlencoded; charset = Windows-1251"); |
Устанавливаем нужную кодовую страницу:
1 | WinHttp.Option(2, "utf-8"); |
Опций у данного объекта достаточно, подробнее можно узнать тут (на английском), исчисление начинается с ноля, то есть третий в списке «WinHttpRequestOption_URLCodePage» будет иметь номер 2 (как в примере).
Stream (ADO)
Теперь рассмотрим объект Stream (ADO), подробнее о нем можно прочесть тут (на английском).
Побитное чтение файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Stream = Новый COMОбъект("ADODB.Stream"); Stream.Type=2; //2 - текст, 1 - бинарный файл Stream.Charset = "windows-1251"; Stream.Open(); Stream.LoadFromFile("C:\файл.txt"); Stream.Position = 0; //начальная позиция курсора Пока (Stream.EOS=0) Цикл Сообщить(Stream.ReadText(1)); КонецЦикла; Stream.Close(); Stream = Неопределено; |
Загрузка файла из сети:
Пример совместного использования объектов WinHttpRequest и Stream (ADO).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | WinHttp.Open("GET", "http://ru.wordpress.org/wordpress-4.0-ru_RU.zip", Ложь); WinHttp.Send(); Если WinHttp.Status = 200 Тогда Stream = Новый COMОбъект("ADODB.Stream"); Stream.Type = 1; Stream.Mode = 3; Stream.Open(); Stream.Write(WinHttp.ResponseBody); Stream.SaveToFile("C:\1.zip", 2); Stream.Close(); Stream = Неопределено; Иначе Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText); Возврат; КонецЕсли; |
Свойство «Mode» устанавливает права на запись файла.
На этом все, надеюсь, что эта статья кому-то помогла.
Загрузка...
Отправка POST запроса
Если WinHttp.Status = 200 Тогда
{C:\РАЗРАБОТКА\база\EXTFORMS\CFG_ВЫГРУЗИТЬДАННЫЕ.ERT(19)}: WinHttp.WinHttpRequest: Данные, необходимые для завершения этой операции еще не доступны.
Как дождаться-то при отправке больших данных?
WinHttp.Timeout(Param)
в милисекундах…
Чтение все же побАЙТное )
Спасибо За статью! Пример совместного использования объектов WinHttpRequest и Stream (ADO). То что искал!