Прокси в УНФ — работа над ошибками
В прошлый раз я добавил российкое прокси для УНФ, размещенное на заграничном сервере, потому что Т-Банк блокировал заграничный трафик Директ-банка.
В этот раз я решил поступить по другому и назначать прокси только на директ-банк.
Получился вот такой код:
&Вместо("СоединениеССервером") Функция дор_СоединениеССервером(АдресСервера, Таймаут) Перем ЗащищенноеСоединение, Адрес, Протокол; Адрес = ""; Протокол = ""; ИнтернетСоединениеБЭД.ОпределитьПараметрыСайта(АдресСервера, ЗащищенноеСоединение, Адрес, Протокол); Соединение = ПродолжитьВызов(АдресСервера, Таймаут); Если Найти (АдресСервера, "1c-api.tinkoff.ru") <> 0 //И ЛОЖЬ Тогда Прокси = Новый ИнтернетПрокси; НастройкиПроксиСервера = дор_НастройкиПроксиСервера(); Прокси.Установить(Протокол, НастройкиПроксиСервера.Сервер, НастройкиПроксиСервера.Порт, НастройкиПроксиСервера.Пользователь, НастройкиПроксиСервера.Пароль, НастройкиПроксиСервера.ИспользоватьАутентификациюОС); Соединение = дор_КопироватьСоединениеСПрокси(Соединение, Адрес, Прокси); КонецЕсли; Возврат Соединение; КонецФункции Функция дор_КопироватьСоединениеСПрокси(Соединение, Адрес, Прокси); //Адрес извлечь из соединения, увы нельзя, он заменяется на сервер //Если Соединение.Пользователь = "" Тогда // Пользователь = Неопределено; //Иначе // Пользователь = Соединение.Пользователь; //КонецЕсли; //Если Соединение.Пароль = "" Тогда // Пароль = Неопределено; //Иначе // Пароль = Соединение.Пароль; //КонецЕсли; //НовоеСоединение = Новый HTTPСоединение(Адрес, Соединение.Порт, Пользователь, Пароль, Прокси, Соединение.Таймаут, Соединение.ЗащищенноеСоединение); //, Соединение.ИспользоватьАутентификациюОС); НовоеСоединение = Новый HTTPСоединение(Адрес, , , , Прокси, Соединение.Таймаут, Соединение.ЗащищенноеСоединение); Возврат НовоеСоединение; КонецФункции Функция дор_НастройкиПроксиСервера() С = Новый Структура(); С.Вставить("Сервер", "*.*.*.*"); С.Вставить("Порт", ****); С.Вставить("Пользователь", "****"); С.Вставить("Пароль", "****"); С.Вставить("ИспользоватьАутентификациюОС", ложь); Возврат С; КонецФункции
Но хочу заметить, что 1С использует в этом модуле старый конструктор HTTP-соединения, поэтому при его копировании получается не тот же результат.
Я долго мучился, получая ошибку 404 в новом соединении, в итоге не стал устанавливать Порт, пользователя и Пароль, т.е. описал соединение так, как это делает 1С:

Видимо, в старой версии конструктора поддерживается адресация не до хоста, а до адреса внутри хоста. Причем важно не передавать порт, пароль и пользователя. Какая-то недокументированная вещь в 1С.




Свежие комментарии