diff --git a/src/ru/OPI/src/CommonModules/OPI_TCP/Module.bsl b/src/ru/OPI/src/CommonModules/OPI_TCP/Module.bsl index c3f286fa9b..211f1c94e0 100644 --- a/src/ru/OPI/src/CommonModules/OPI_TCP/Module.bsl +++ b/src/ru/OPI/src/CommonModules/OPI_TCP/Module.bsl @@ -49,12 +49,13 @@ // Создает TCP соединение // // Параметры: -// Адрес - Строка - Адрес и порт для подключения - address -// Tls - Структура Из КлючИЗначение - Настройки TLS, если необходимо. См. ПолучитьНастройкиTls - tls +// Адрес - Строка - Адрес и порт для подключения - address +// Tls - Структура Из КлючИЗначение - Настройки TLS, если необходимо. См. ПолучитьНастройкиTls - tls +// Прокси - Структура Из КлючИЗначение - Настройки прокси, если необходимо. См. ПолучитьНастройкиПрокси - proxy // // Возвращаемое значение: // Соответствие Из КлючИЗначение, Произвольный - Возвращает объект TCP клиента при успешном подключении или информацию об ошибке -Функция ОткрытьСоединение(Знач Адрес, Знач Tls = "") Экспорт +Функция ОткрытьСоединение(Знач Адрес, Знач Tls = "", Знач Прокси = "") Экспорт OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес); OPI_Инструменты.ВернутьУправляющиеПоследовательности(Адрес); @@ -72,6 +73,20 @@ Если Не OPI_Инструменты.ПолучитьИли(Tls, "result", Ложь) Тогда Возврат Tls; КонецЕсли; + + Если ЗначениеЗаполнено(Прокси) Тогда + + OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Прокси); + ПроксиСтрокой = OPI_Инструменты.JSONСтрокой(Прокси); + + Установка = TCPКлиент.SetProxySettings(ПроксиСтрокой); + Установка = OPI_Инструменты.JsonВСтруктуру(Установка); + + Если Не OPI_Инструменты.ПолучитьИли(Установка, "result", Ложь) Тогда + Возврат Установка; + КонецЕсли; + + КонецЕсли; Успех = TCPКлиент.Connect(); @@ -87,7 +102,7 @@ // Явно закрывает созданное ранее соединение // // Параметры: -// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp +// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - tcp // // Возвращаемое значение: // Булево - всегда возвращает Истина @@ -106,7 +121,7 @@ // При закрытии соединения, ошибке или обнаружении EOF чтение завершается в любом случае // // Параметры: -// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp +// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - tcp // МаксимальныйРазмер - Число - Максимальный размер данных (байт). 0 > без ограничений - size // Маркер - Строка, ДвоичныеДанные - Маркер конца сообщения. Пусто > без маркера - marker // Таймаут - Число - Таймаут ожидания данных (мс). 0 > без ограничений - timeout @@ -140,10 +155,10 @@ // При закрытии соединения, ошибке или обнаружении EOF чтение завершается в любом случае // // Параметры: -// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp -// Кодировка - Строка - Кодировка преобразования данных в строку - enc -// Маркер - Строка, ДвоичныеДанные - Маркер конца сообщения. Пусто > без маркера - marker -// Таймаут - Число - Таймаут ожидания данных (мс). 0 > без ограничений - timeout +// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - tcp +// Кодировка - Строка - Кодировка преобразования данных в строку - enc +// Маркер - Строка, ДвоичныеДанные - Маркер конца сообщения. Пусто > без маркера - marker +// Таймаут - Число - Таймаут ожидания данных (мс). 0 > без ограничений - timeout // // Возвращаемое значение: // Строка - Полученные данные в виде строки @@ -165,7 +180,7 @@ // Отправляет двоичные данные через указанное соединение // // Параметры: -// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp +// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - tcp // Данные - ДвоичныеДанные - Данные для отправки - data // Таймаут - Число - Таймаут ожидания записи (мс). 0 > без ограничений - timeout // @@ -186,7 +201,7 @@ // Отправляет данные в виде строки через указанное соединение // // Параметры: -// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp +// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - tcp // Данные - Строка - Данные для отправки в виде строки - data // Кодировка - Строка - Кодировка для записи исходящей строки в поток - enc // Таймаут - Число - Таймаут ожидания записи (мс). 0 > без ограничений - timeout @@ -210,19 +225,24 @@ // Отправляет одиночный запрос на указанный адрес и получает ответ, используя стандартные настройки // // Параметры: -// Адрес - Строка - Адрес и порт для подключения - address -// Данные - Строка, ДвоичныеДанные - Данные или текст для отправки - data -// ОтветСтрокой - Булево - Признак получения ответа как строки - string -// Tls - Структура Из КлючИЗначение - Настройки TLS, если необходимо. См. ПолучитьНастройкиTls - tls +// Адрес - Строка - Адрес и порт для подключения - address +// Данные - Строка, ДвоичныеДанные - Данные или текст для отправки - data +// ОтветСтрокой - Булево - Признак получения ответа как строки - string +// Tls - Структура Из КлючИЗначение - Настройки TLS, если необходимо. См. ПолучитьНастройкиTls - tls +// Прокси - Структура Из КлючИЗначение - Настройки прокси, если необходимо. См. ПолучитьНастройкиПрокси - proxy // // Возвращаемое значение: // ДвоичныеДанные, Строка - Ответ на запрос или информация об ошибке -Функция ОбработатьЗапрос(Знач Адрес, Знач Данные = "", Знач ОтветСтрокой = Истина, Знач Tls = "") Экспорт +Функция ОбработатьЗапрос(Знач Адрес + , Знач Данные = "" + , Знач ОтветСтрокой = Истина + , Знач Tls = "" + , Знач Прокси = "") Экспорт OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные, Истина, Ложь); OPI_ПреобразованиеТипов.ПолучитьБулево(ОтветСтрокой); - Соединение = ОткрытьСоединение(Адрес, Tls); + Соединение = ОткрытьСоединение(Адрес, Tls, Прокси); Если Не OPI_Компоненты.ЭтоКомпонента(Соединение) Тогда Возврат Соединение; @@ -266,7 +286,7 @@ // Получает информацию о последней ошибке в соединении // // Параметры: -// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp +// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - tcp // // Возвращаемое значение: // Соответствие Из КлючИЗначение, Неопределено - Информация об ошибке или неопределено, если ошибки нет @@ -284,6 +304,29 @@ КонецФункции +// Получить настройки прокси +// Формирует структуру настроек прокси-сервера для соединения +// +// Параметры: +// Адрес - Строка - Адрес прокси - addr +// Порт - Число - Порт прокси - port +// Вид - Строка - Вид прокси: socks5, socks4, http - type +// Логин - Строка, Неопределено - Логин авторизации, если необходимо - login +// Пароль - Строка, Неопределено - Пароль для авторизации, если необходимо - pass +// +// Возвращаемое значение: +// Структура Из КлючИЗначение - Структура настроек прокси +Функция ПолучитьНастройкиПрокси(Знач Адрес + , Знач Порт + , Знач Вид = "socks5" + , Знач Логин = Неопределено + , Знач Пароль = Неопределено) Экспорт + + //@skip-check constructor-function-return-section + Возврат OPI_Компоненты.ПолучитьНастройкиПрокси(Адрес, Порт, Вид, Логин, Пароль); + +КонецФункции + // Получить настройки TLS // Формирует настройки для использования TLS при выполнении запросов // diff --git a/src/ru/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl b/src/ru/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl index 82f81ad506..9ebfb304f0 100644 --- a/src/ru/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl +++ b/src/ru/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl @@ -7772,6 +7772,16 @@ КонецФункции +Функция Проверка_TCP_ПолучитьНастройкиПрокси(Знач Результат, Знач Вариант) + + ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина); + + Результат["password"] = "***"; + + Возврат Результат; + +КонецФункции + Функция Проверка_SQLite_ОткрытьСоединение(Знач Результат, Знач Вариант) Если Вариант = "Закрытие" Тогда diff --git a/src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl b/src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl index 5edc9c7b23..e84703a2c7 100644 --- a/src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl +++ b/src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl @@ -2246,6 +2246,10 @@ ПараметрыТеста = Новый Структура; OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("TCP_Address" , ПараметрыТеста); OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("TCP_AddressTLS", ПараметрыТеста); + OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Proxy_User" , ПараметрыТеста); + OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Proxy_Password", ПараметрыТеста); + OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Socks5_IP" , ПараметрыТеста); + OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Socks5_Port" , ПараметрыТеста); TCP_ОткрытьСоединение(ПараметрыТеста); TCP_ЗакрытьСоединение(ПараметрыТеста); @@ -2256,6 +2260,7 @@ TCP_ОбработатьЗапрос(ПараметрыТеста); TCP_ПолучитьНастройкиTLS(ПараметрыТеста); TCP_ПолучитьПоследнююОшибку(ПараметрыТеста); + TCP_ПолучитьНастройкиПрокси(ПараметрыТеста); КонецПроцедуры @@ -14822,7 +14827,18 @@ Адрес = "tcpbin.com:4243"; Tls = OPI_TCP.ПолучитьНастройкиTLS(Истина); - Соединение = OPI_TCP.ОткрытьСоединение(Адрес, TLS); + + ПроксиПользователь = ПараметрыФункции["Proxy_User"]; + ПроксиПароль = ПараметрыФункции["Proxy_Password"]; + ПроксиАдрес = ПараметрыФункции["Socks5_IP"]; + ПроксиПорт = ПараметрыФункции["Socks5_Port"]; + + ПроксиАдрес = ?(ПроксиАдрес = "127.0.0.1", OPI_ПолучениеДанныхТестов.ПолучитьLocalhost(), ПроксиАдрес); // SKIP + + Прокси = OPI_TCP.ПолучитьНастройкиПрокси(ПроксиАдрес, ПроксиПорт, "socks5", ПроксиПользователь, ПроксиПароль); + Tls = OPI_TCP.ПолучитьНастройкиTLS(Истина); + + Соединение = OPI_TCP.ОткрытьСоединение(Адрес, TLS, Прокси); // END @@ -14915,9 +14931,18 @@ Обработать(Результат, "TCP", "ОбработатьЗапрос", , "Echo this!" + Символы.ПС); // SKIP Адрес = ПараметрыФункции["TCP_AddressTLS"]; - Tls = OPI_TCP.ПолучитьНастройкиTLS(Истина); + + ПроксиПользователь = ПараметрыФункции["Proxy_User"]; + ПроксиПароль = ПараметрыФункции["Proxy_Password"]; + ПроксиАдрес = ПараметрыФункции["Socks5_IP"]; + ПроксиПорт = ПараметрыФункции["Socks5_Port"]; - Результат = OPI_TCP.ОбработатьЗапрос(Адрес, Данные, , Tls); + ПроксиАдрес = ?(ПроксиАдрес = "127.0.0.1", OPI_ПолучениеДанныхТестов.ПолучитьLocalhost(), ПроксиАдрес); // SKIP + + Прокси = OPI_TCP.ПолучитьНастройкиПрокси(ПроксиАдрес, ПроксиПорт, "socks5", ПроксиПользователь, ПроксиПароль); + Tls = OPI_TCP.ПолучитьНастройкиTLS(Истина); + + Результат = OPI_TCP.ОбработатьЗапрос(Адрес, Данные, , Tls, Прокси); // END @@ -15010,6 +15035,23 @@ КонецПроцедуры +Процедура TCP_ПолучитьНастройкиПрокси(ПараметрыФункции) + + ТипПрокси = "socks5"; // http, socks5, socks4 + + АдресПрокси = ПараметрыФункции["Proxy_IP"]; + ПортПрокси = ПараметрыФункции["Proxy_Port"]; + ЛогинПрокси = ПараметрыФункции["Proxy_User"]; + ПарольПрокси = ПараметрыФункции["Proxy_Password"]; + + Результат = OPI_TCP.ПолучитьНастройкиПрокси(АдресПрокси, ПортПрокси, ТипПрокси, ЛогинПрокси, ПарольПрокси); + + // END + + Обработать(Результат, "TCP", "ПолучитьНастройкиПрокси"); + +КонецПроцедуры + #КонецОбласти #Область SQLite