Прокси в УНФ — работа над ошибками

В прошлый раз я добавил российкое прокси для УНФ, размещенное на заграничном сервере, потому что Т-Банк блокировал заграничный трафик Директ-банка.

В этот раз я решил поступить по другому и назначать прокси только на директ-банк.

Получился вот такой код:


&Вместо("СоединениеССервером")
Функция дор_СоединениеССервером(АдресСервера, Таймаут)
	
	Перем ЗащищенноеСоединение, Адрес, Протокол;
	
	Адрес = "";
	Протокол = "";

	ИнтернетСоединениеБЭД.ОпределитьПараметрыСайта(АдресСервера, ЗащищенноеСоединение, Адрес, Протокол);
	Соединение = ПродолжитьВызов(АдресСервера, Таймаут);  


	
	Если Найти (АдресСервера, "1c-api.tinkoff.ru") <> 0  //И ЛОЖЬ
		Тогда
		
		Прокси = Новый ИнтернетПрокси;   
		
		НастройкиПроксиСервера = дор_НастройкиПроксиСервера();
		
		Прокси.Установить(Протокол, НастройкиПроксиСервера.Сервер, НастройкиПроксиСервера.Порт, НастройкиПроксиСервера.Пользователь, НастройкиПроксиСервера.Пароль, НастройкиПроксиСервера.ИспользоватьАутентификациюОС);		
		Соединение = дор_КопироватьСоединениеСПрокси(Соединение, Адрес, Прокси);
		
	КонецЕсли;
	
	Возврат Соединение;
	
КонецФункции         

Функция дор_КопироватьСоединениеСПрокси(Соединение, Адрес, Прокси);  
	//Адрес извлечь из соединения, увы нельзя, он заменяется на сервер                      
	
	//Если Соединение.Пользователь = "" Тогда
	//	Пользователь = Неопределено;
	//Иначе
	//	Пользователь = Соединение.Пользователь;
	//КонецЕсли;
	//Если Соединение.Пароль = "" Тогда
	//	Пароль = Неопределено;
	//Иначе
	//	Пароль = Соединение.Пароль;
	//КонецЕсли;
	//НовоеСоединение = Новый HTTPСоединение(Адрес, Соединение.Порт, Пользователь, Пароль, Прокси, Соединение.Таймаут, Соединение.ЗащищенноеСоединение); //, Соединение.ИспользоватьАутентификациюОС);
	НовоеСоединение = Новый HTTPСоединение(Адрес, , , , Прокси, Соединение.Таймаут, Соединение.ЗащищенноеСоединение);
	Возврат НовоеСоединение;
КонецФункции

Функция дор_НастройкиПроксиСервера()
	С = Новый Структура();
	С.Вставить("Сервер", "*.*.*.*");
	С.Вставить("Порт", ****);
	С.Вставить("Пользователь", "****");
	С.Вставить("Пароль", "****");
	С.Вставить("ИспользоватьАутентификациюОС", ложь);
	Возврат С;
КонецФункции


Но хочу заметить, что 1С использует в этом модуле старый конструктор HTTP-соединения, поэтому при его копировании получается не тот же результат.

Я долго мучился, получая ошибку 404 в новом соединении, в итоге не стал устанавливать Порт, пользователя и Пароль, т.е. описал соединение так, как это делает 1С:

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

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *