1С и Telegram. Об опыте использования прокси-серверов

Публикация № 879132

Разработка - Практика программирования

Прокси-сервер Телеграм Telegram

Рассказ о том, как немного улучшить отправку сообщений из 1С в Телеграм в условиях использования прокси-серверов

Все мы знаем и любим мессенджер Телеграм. Несмотря на то, что данный мессенджер заблокирован в России, многие пользуются им. Этот факт очевиден хотя бы потому, что на Инфостарте регулярно выходят статьи, освещающие какие-либо аспекты интеграции решений на платформе 1С и Телеграма. В данной статье хочу поделиться небольшим и, может быть, очевидным лайфхаком по использованию Телеграма в условиях блокировки.

ИнтернетПрокси = Новый ИнтернетПрокси(Ложь);
ИнтернетПрокси.Установить(Прокси.Протокол, Прокси.Сервер, Прокси.Порт, Прокси.Пользователь, Прокси.Пароль, Ложь);
Соединение  =  Новый HTTPСоединение("api.telegram.org",443,,,ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL());
ПолучениеЗапрос = "bot"+ТокенБота+"/sendMessage?chat_id="+Адресат+"&text="+ Сообщение;
Запрос = Новый HTTPЗапрос(ПолучениеЗапрос);
Ответ = Соединение.Получить(Запрос);
  

После блокировки Телеграма и последовавших за этим событий возник резонный вопрос о стабильности работы мессенджера. Иными словами, в условиях, когда подключение к Телеграму осуществляется с использованием различных прокси, возникают дополнительные риски, связанные с тем, что прокси-сервер может быть заблокирован или перегружен. Здесь замечу, что мы решали задачу по отправке уведомлений о различных событиях системы в Телеграм. Ну например, кто-то из пользователей изменил какой-то документ, и об этом изменении информируются все остальные пользователи путем отправки сообщения в общий чат. Функциональность незатейливая, но позволяющая поддерживать распространение информации в условиях совместной работы.

В благодатные времена, когда Телеграм не блокировался, описанная выше функциональность реализовывалась буквально в несколько строк кода:

Соединение  =  Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
ПолучениеЗапрос = "bot"+ТокенБота+"/sendMessage?chat_id="+Адресат+"&text="+ Сообщение;
Запрос = Новый HTTPЗапрос(ПолучениеЗапрос);
Ответ = Соединение.Получить(Запрос);

После блокировки приходится добавить прокси:

Казалось бы, код практически не усложнился. Но это на первый взгляд. А где взять прокси? Логично, что в Интернете есть множество сайтов, на которых приведены актуальные списки прокси-серверов. И в самом начале мы воспользовались одним из таких сайтов, где и взяли параметры для подключения к прокси-серверу. Естественно, что сами параметры подключения к прокси оставлять в исходном коде просто не спортивно, ведь может возникнуть и возникнет необходимость изменить их.  Поэтому вполне логично завести справочник прокси-серверов. Сам справочник приведен на рисунке ниже:

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

ВыборкаПрокси = Справочники.Прокси.Выбрать();
Пока ВыборкаПрокси.Следующий() Цикл

	Попытка
		ИнтернетПрокси = Новый ИнтернетПрокси(Ложь);
		ИнтернетПрокси.Установить(ВыборкаПрокси.Протокол, ВыборкаПрокси.Сервер, ВыборкаПрокси.Порт, ВыборкаПрокси.Пользователь, ВыборкаПрокси.Пароль, Ложь);
		Соединение  =  Новый HTTPСоединение("api.telegram.org",443,,,ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL());
		ПолучениеЗапрос = "bot"+ТокенБота+"/sendMessage?chat_id="+Адресат+"&text="+ Сообщение;
		Запрос = Новый HTTPЗапрос(ПолучениеЗапрос);
		Ответ = Соединение.Получить(Запрос);					
		Прервать;
	Исключение
	КонецПопытки;	
КонецЦикла;

Примерно такая версия отправки сообщений через прокси начала работать у нас в апреле через несколько дней после  известных всем событий. Пару недель этот способ работал хорошо, но потом возникли некоторые проблемы:

  • Часть прокси-серверов оказалась заблокированной
  • Другая часть прокси периодически становилась недоступной

Для решения этих проблем в справочнике были введены реквизиты "ИспользоватьПоУмолчанию" и "Порядок", которые были призваны обеспечить попытку отправки сообщений через наиболее надежные прокси-сервера. Очевидно, что надежность определялась на глазок. Кроме того изменять эти реквизиты приходилось вручную, что не особо радовало.

На этом велосипеде мы ехали около месяца. Но в начале июня стало понятно, что кактус уже слишком колючий, чтобы его есть, поскольку время отправки сообщений варьировалось от 5 до 30 минут. Иными словами, перебор прокси шел в соответствии с вручную установленными параметрами и, если везло, то отправка происходила с первого-второго раза, а если нет, то перебор прокси продолжался, при этом, как было замечено выше, перебор этот не был основан на сколь-нибудь объективной оценке. Здесь замечу, что при всех описанных неудобствах сообщения все-таки приходили, однако ценность пришедшего через пол часа сообщения, мягко говоря, не всегда была велика, а иногда возникала путаница: поскольку отправка сообщений осуществлялась через фоновые задания, то иногда отправленное позже сообщений приходило даже раньше более раннего сообщения. Ничего хорошего в такой ситуации нет.

Что же делать? С одной стороны можно было забросить Телеграм и переехать на Slack или Viber или даже вернуться к использованию собственного XMPP-сервера. С другой стороны не хотелось отказываться от всех наработок, да и трудозатраты на переезд представлялись вполне ощутимыми. В связи с этим в голову пришла простая и логичная мысль - вести историю отправки и уже на основании этой истории строить своеобразный  рейтинг прокси-серверов. Такой подход позволил бы автоматически определять прокси, который в настоящее время наиболее надежен (то есть стабильно отправляет сообщения).

Для ведения истории был создан простой регистр:

В этот регистр записывался факт отправки или неотправки сообщения через прокси-сервер,  если сообщение было отправлено, то записывалась 1, иначе -1.

Таким образом, код отправки стал выглядеть примерно так:

Функция ПолучитьHTTPСоединениеСПрокси(Прокси) Экспорт
	Если Прокси = Неопределено Тогда
		Соединение  =  Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
	Иначе
		ИнтернетПрокси = Новый ИнтернетПрокси(Ложь);
		ИнтернетПрокси.Установить(Прокси.Протокол, Прокси.Сервер, Прокси.Порт, Прокси.Пользователь, Прокси.Пароль, Ложь);
		Соединение  =  Новый HTTPСоединение("api.telegram.org",443,,,ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL());
	КонецЕсли;
	Возврат Соединение;
КонецФункции

Процедура ДобавитьВНаборСтатистикиОтправкиСообщенийВМессенджер(Набор, Прокси, Отправлено)
	НСтр = Набор.Добавить();
	НСтр.Период = ТекущаяДата();
	НСтр.Прокси = Прокси;
	НСтр.Отправлено = Отправлено;
КонецПроцедуры

Функция ОтправитьСообщение(Сообщение, Адресат, ТокенБота)  Экспорт
		
	ВыборкаПрокси = ПолучитьАктивныеПрокси();
	Ответ = Неопределено;
	Ок = "";
	
	Набор = РегистрыСведений.СтатистикаОтправкиСообщенийВМессенджер.СоздатьНаборЗаписей();
	
	Пока ВыборкаПрокси.Следующий() Цикл

		Попытка
			Соединение  =  ПолучитьHTTPСоединениеСПрокси(ВыборкаПрокси.Ссылка);
			ПолучениеЗапрос = "bot"+ТокенБота+"/sendMessage?chat_id="+Адресат+"&text="+ Сообщение;
			Запрос = Новый HTTPЗапрос(ПолучениеЗапрос);
			Ответ = Соединение.Получить(Запрос);
			ДобавитьВНаборСтатистикиОтправкиСообщенийВМессенджер(Набор, ВыборкаПрокси.Ссылка, 1);
						
			Прервать;
		Исключение
			ДобавитьВНаборСтатистикиОтправкиСообщенийВМессенджер(Набор, ВыборкаПрокси.Ссылка, -1);
		КонецПопытки;
	
	КонецЦикла;
	
	Набор.Записать(Ложь);
		
	Если ЗначениеЗаполнено(Ответ) = Истина Тогда
		
		Чтение = Новый ЧтениеJSON;
		Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());		
		ОтветСоотв = ПрочитатьJSON(Чтение,Истина);
		Ок = ОтветСоотв["ok"] ;	
		
	КонецЕсли;
	
	Возврат Ок
	
КонецФункции

В приведенном фрагменте кода присутствует вызов функции ПолучитьАктивныеПрокси(), однако нет ее объявления. Поэтому хочется остановиться на данной функции подробнее. Само по себе хранение истории отправки сообщений дает совсем не много. Ну что интересного в, например, таких данных:

Видно, что через какие-то прокси сообщения не уходят, через какие-то уходят, а иногда отправка работает через раз. Очевидно, что необходим какой-то критерий для составления того самого рейтинга прокси, о котором говорилось выше. Долго думать над таким критерием не пришлось - за аналог был взят метод оценки по трем точкам. То есть прокси ранжировались исходя из суммы трех показателей:

  • сумма успешных и неуспешных отправлений за месяц;
  • успешность последней отправки;
  • сумма успешных и неуспешных отправлений за текущий день

Каждый из указанных показателей имеет свой коэффициент - 7/12, 3/12 и 2/12 соответственно, коэффициенты подобраны эвристически. При этом неуспешное отправление при суммировании за день засчитывается не за -1 а за -0,8. Такую оценку словами можно описать примерно так: "если прокси хорошо отправлял в течении предыдущего месяца (читай 30 предшествующих дней, то скорее всего будет выбран он, однако если в течении дня прокси работал нестабильно и последняя отправка была неудачной, то возможно его рейтинг снизится) ". Теперь приведу код ранжирования:

Функция ПолучитьАктивныеПрокси() Экспорт
	Запрос = Новый Запрос;            
	Запрос.Текст = "ВЫБРАТЬ
	               |	СтатистикаОтправкиСообщенийВМессенджерСрезПоследних.Прокси,
	               |	СтатистикаОтправкиСообщенийВМессенджерСрезПоследних.Отправлено
	               |ПОМЕСТИТЬ ВтПоследние
	               |ИЗ
	               |	РегистрСведений.СтатистикаОтправкиСообщенийВМессенджер.СрезПоследних КАК СтатистикаОтправкиСообщенийВМессенджерСрезПоследних
	               |ГДЕ
	               |	СтатистикаОтправкиСообщенийВМессенджерСрезПоследних.Отправлено = 1
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	СтатистикаОтправкиСообщенийВМессенджер.Прокси,
	               |	СУММА(ВЫБОР
	               |			КОГДА СтатистикаОтправкиСообщенийВМессенджер.Отправлено < 0
	               |				ТОГДА -0.8
	               |			ИНАЧЕ СтатистикаОтправкиСообщенийВМессенджер.Отправлено
	               |		КОНЕЦ) КАК Отправлено
	               |ПОМЕСТИТЬ ВтДень
	               |ИЗ
	               |	РегистрСведений.СтатистикаОтправкиСообщенийВМессенджер КАК СтатистикаОтправкиСообщенийВМессенджер
	               |ГДЕ
	               |	СтатистикаОтправкиСообщенийВМессенджер.Период МЕЖДУ &ДатаНачала И &ДатаКонец
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	СтатистикаОтправкиСообщенийВМессенджер.Прокси
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	СтатистикаОтправкиСообщенийВМессенджер.Прокси,
	               |	СУММА(СтатистикаОтправкиСообщенийВМессенджер.Отправлено) КАК Отправлено
	               |ПОМЕСТИТЬ ВтМесяц
	               |ИЗ
	               |	РегистрСведений.СтатистикаОтправкиСообщенийВМессенджер КАК СтатистикаОтправкиСообщенийВМессенджер
	               |ГДЕ
	               |	СтатистикаОтправкиСообщенийВМессенджер.Период МЕЖДУ &ДатаНачала1 И &ДатаКонец1
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	СтатистикаОтправкиСообщенийВМессенджер.Прокси
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ВтМесяц.Прокси,
	               |	ВтМесяц.Отправлено КАК ОтправленоМесяц,
	               |	ВтПоследние.Отправлено КАК ОтправленоПоследнее,
	               |	ВтДень.Отправлено КАК ОтправленоДень,
	               |	ЕСТЬNULL(ВтМесяц.Отправлено, 0) * (7 / 12) + ЕСТЬNULL(ВтПоследние.Отправлено, 0) * (3 / 12) + ЕСТЬNULL(ВтДень.Отправлено, 0) * (2 / 12) КАК ОтправленоУсред
	               |ПОМЕСТИТЬ ВтСтат
	               |ИЗ
	               |	ВтМесяц КАК ВтМесяц
	               |		ЛЕВОЕ СОЕДИНЕНИЕ ВтПоследние КАК ВтПоследние
	               |		ПО ВтМесяц.Прокси = ВтПоследние.Прокси
	               |		ЛЕВОЕ СОЕДИНЕНИЕ ВтДень КАК ВтДень
	               |		ПО ВтМесяц.Прокси = ВтДень.Прокси
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ЕСТЬNULL(ВтСтат.ОтправленоУсред, 0) КАК ОтправленоУсред,
	               |	ВложенныйЗапрос.Ссылка КАК Ссылка
	               |ИЗ
	               |	(ВЫБРАТЬ
	               |		Прокси.Ссылка КАК Ссылка,
	               |		Прокси.Порядок КАК Порядок
	               |	ИЗ
	               |		Справочник.Прокси КАК Прокси
	               |	ГДЕ
	               |		Прокси.Активно = ИСТИНА) КАК ВложенныйЗапрос
	               |		ЛЕВОЕ СОЕДИНЕНИЕ ВтСтат КАК ВтСтат
	               |		ПО ВложенныйЗапрос.Ссылка = ВтСтат.Прокси
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	ОтправленоУсред УБЫВ";
				   
	Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()) );
	Запрос.УстановитьПараметр("ДатаКонец", ТекущаяДата());
	Запрос.УстановитьПараметр("ДатаНачала1", ДобавитьМесяц(ТекущаяДата(), -1));
	Запрос.УстановитьПараметр("ДатаКонец1", ТекущаяДата());	
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	Возврат Выборка;
	
КонецФункции

Функция оказалась совсем незатейливой.  Однако результаты выбранного подхода порадовали. В течении недели собиралась статистика и время отправки сообщений так и оставалось на уровне 5-30 минут, перебор прокси все еще был почти случайным. Но через несколько дней время отправки стабилизировалось и в среднем перестало превышать 1 минуту с редкими задержками до 5 минут.  Казалось бы, просто на основании истории были определены 1-2 наиболее стабильных прокси сервера, которые и обеспечивали стабильную отправку сообщений. Однако на деле происходит так, что если эти стабильные прокси вдруг почему-то перестают работать, то их заменяют другие прокси-сервера, которые может быть, не так стабильны, но в текущий момент работают. При этом, например, на следующий день отправка может пойти снова через тот прокси, который вчера почему-то "захандрил".

Для подтверждения сказанного приведу простенькую статистику.

Из рисунка видно, что в период с 16 по 22 июня количество ошибок (когда прокси не отвечал) при отправке сообщений было крайне велико. При этом каждая ошибка увеличивала время отправки сообщений. Однако позднее количество ошибок при отправке снижается и выходит на достаточно стабильный уровень, что обусловлено, как уже говорилось выше, с одной стороны отсутствием необоснованного перебора прокси-серверов и с другой стороны возможностью автоматически производить отправку через прокси с "рейтингом чуть ниже", если "самый хороший сервер" почему-то не отвечает.

Например, заметно, что в первый день использования истории и ранжирования перебор прокси производился практически случайно и большое количество ошибок при отправке обуславливалось тем, что происходило подключение к недоступным прокси. Замечу только, что многие из этих недоступных прокси серверов проверялись буквально за день до этого и были вполне работоспособны.

Если же посмотреть на свежие данные, то очевидно, что:

  • При небольшом числе сообщений за день отправка происходит с использованием одного-двух прокси-"лидеров рейтинга" (например 31.07.2018, 01.08.2018);
  • При чуть большем количестве сообщений иногда используются прокси с чуть меньшим рейтингом (например 30.07.2018);
  • При еще большем количестве сообщений и наличии проблем у прокси-"лидеров" используется еще большее количество серверов (например 27.07.2018), но при этом в отличии от ситуации на предыдущем рисунке ( 16.06.2018) доля обращений к серверам, которые не отвечают, совсем мала; если говорить по-другому то аутсайдеру давался шанс, в условиях, когда лидеры рейтинга сплоховали, но если шанс использован не был, то второго шанса точно не будет.

В завершении хочу сказать, что приведенное решение в общем-то лежит на поверхности. Однако надеюсь, что кому-то этот опыт будет полезен, поскольку он наглядно демонстрирует то, что даже в условиях блокировки и не всегда стабильной работы прокси не стоит спешить отказываться от уже реализованной интеграции с Телеграмом.

Этой мой первый пост, буду признателен за конструктивную обратную связь!

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. user634257_mryzhov 02.08.18 11:17 Сейчас в теме
Решение красивое.
Не решились использовать в продакшене стороние прокси серверы - в плане безопасности сомнительное решение
Переход на slack оказался проще и логичнее.
4. saa@kuzov.org 02.08.18 13:15 Сейчас в теме
(1)
slack


Поделитесь, пожалуйста, подробностями?
1) Есть ли апи в бесплатной версии?
2) Если платная, то как платите с расчетного счета?
3) Встречали ли примеры интеграции с 1С в открытом доступе?
8. user634257_mryzhov 02.08.18 13:51 Сейчас в теме
(4)
1. Есть, все бесплатно
3. Интеграция
	ssl = Новый ЗащищенноеСоединениеOpenSSL(неопределено,Новый СертификатыУдостоверяющихЦентровWindows()); 
	ЗаголовкиHTTP=Новый Соответствие();		
	ЗаголовкиHTTP.Вставить("Content-Type","Content-Type: application/json");
	HTTPСоединение = Новый HTTPСоединение("hooks.slack.com",443,,,,,ssl,);  
	HTTPЗапрос = Новый HTTPЗапрос(webhook) ; 
	ТелоЗапроса="{""text"": """+text+"""}";
	HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
HTTPОтвет=HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);

Показать

webhook - токен из слака
text - текст сообщения
SirStefan; +1 Ответить
9. Infactum 283 02.08.18 14:19 Сейчас в теме
(8) JSON через конкатенацию строк, без экранирования. Норм интеграция.
PLAstic; JohnyDeath; CSiER; +3 Ответить
20. Yashazz 3321 07.08.18 12:10 Сейчас в теме
(9) Ну ладно ворчать-то. Ну бывает. Все мы порой не брезгуем хмл или джейсон как строку колбасить, иногда это очевидно проще)
2. sound 530 02.08.18 11:43 Сейчас в теме
Хороший первый пост. С почином :)
12. altmf 46 02.08.18 15:22 Сейчас в теме
3. Infactum 283 02.08.18 11:45 Сейчас в теме
Свой прокси сервер не стоит практически ничего даже для физлиц. А ещё более правильно было бы настроить прозрачную маршрутизацию на роутере. Любит народ костыли городить
VeleX; kirillkr; +2 1 Ответить
5. saa@kuzov.org 02.08.18 13:20 Сейчас в теме
(3) Дроплет на DO от 5 баксов в месяц. Дальше настроить не проблема.
Проблема только в том, что с расчетного счета компании не оплатить никак.

А что значит "настроить прозрачную маршрутизацию на роутере"? Куда кого маршрутизировать?
У меня телеграмм на компе и на мобилке.
На мобилке я ничего маршрутизировать не могу. Могу VPN настроить. Но тогда обязательной становится блокировка экрана паролем, а это неудобно.

Поделитесь, пожалуйста, мудростью. Можно даже в личку. Спасибо!
6. Infactum 283 02.08.18 13:35 Сейчас в теме
(5) Поднять VPN на роутере. Трафик на нужные подсети/адреса заворачивать туда.
Довольно очевидное решение. Любой админ настроит легко.

Ну и 5$ за DO это перебор, если требуется только к api телеграма доступ получить.
10. altmf 46 02.08.18 15:14 Сейчас в теме
(3) Свой прокси-сервер, безусловно, тоже является решением. Однако не могу не поинтересоваться, а в чем же описанное мной решение является костылем с точки зрения практики программирования? Статья ведь в этой рубрике размещена =)
13. Infactum 283 02.08.18 15:28 Сейчас в теме
(10) Если речь идет о коде ради кода - то сойдет.
Но программист (не просто кодер!) должен сначала обдумать варианты решения и выбрать оптимальный. Потом уже писать что-то.
14. altmf 46 02.08.18 15:51 Сейчас в теме
(13)Строго говоря с точки зрения программиста в статье описаны некоторые варианты решения и приведена мотивация, почему они не использованы. Выбор же того, выполнять доработку программного обеспечения, настройку сетевого оборудования или настраивать собственный прокси, лежит несколько за пределами компетенций и трудовых функций программиста. Поэтому не могу согласиться с вами ни в вашей оценке ни в ее форме. Кроме того, предложенный вами вариант точно также несет определенные риски и обладает определенными особенностями. Так что считаю, что разнообразие всегда на пользу и, что очевидно, одна задача может быть решена разными способами тем более в разных условиях.
7. 🅵🅾️🆇 02.08.18 13:40 Сейчас в теме
А в чем проблема купить на aruba.it VPS сервер за 1$/мес и спокойно использовать его как прокси самому, раздать друзьям и попутно еще и всякие свои проектики на нем вести? Веб сервер поднять, опять же.

Вот что по ресурсам и нагрузке на чуть более дорогом хостинге в нидерландах (каком - не скажу).
На нем поднят веб-сервер, openvpn и сидит около 30 людей с проксей.
Прикрепленные файлы:
11. altmf 46 02.08.18 15:19 Сейчас в теме
(7) Да в общем-то такой проблемы и нет, но как я уже заметил выше в статье раскрывается аспект повышения надежности использования прокси с точки зрения программирования и программиста, потому и размещена статья в соответствующей рубрике.
Ну и если говорить о собственном прокси, то нельзя ведь не заметить, что и он наверняка может подпасть под блокировку или стать неприемлемо медленным. Или вы по каким-то другим причинам не делитесь с нами тем самым хостингом в Нидерландах? =)
15. 🅵🅾️🆇 02.08.18 17:51 Сейчас в теме
(11) Не хочу чтоб подумали, что рекламирую.
Хостинг как хостинг, я про него вообще не слышал, за 230 руб/мес то что вы видите на скриншоте.
Если есть интерес или вопросы по поднятию - в личку.

Аруба показала себя довольно вменяемо, разворачивают долго (пол дня надо ждать) и интерфейс админки супер отвратительный и запутанный.
Но собственно как подключитесь putty - Вам уже, по идее, все равно. Чешский лагал, кстати, а итальянский и остальные (по отзывам) себя хорошо показывали за такую цену. Трафика там - 2 ТБ/мес, если не ошибаюсь.

Ну это я к тому, что слишком много ухищрений, чтоб сэкономить 1$/мес. Дополнительным бонусом сможете сами сидеть и друзьям в пользование отдать.
Заблокируют - да боже, сменю хостинг. Заблокируют весь интернет - смысл пребывания в этой стране из близкого к нулю - станет отрицательным и сменю не хостинг, а страну.


PS: а, черт с ним, вот адрес моих проксей: http://185.246.152.100/ (через who is сами найдете)
PPS: если что, свои прокся можно скидывать юзверам в таком виде: https://t.me/socks?server=YOUR_IP&port=YOUR_PORT&user=YOUR_LOGIN&pass=YOUR_PASS­WORD (по клику они автоматически подключатся в телеге)
mirco; comol; altmf; CSiER; +4 Ответить
16. altmf 46 03.08.18 04:18 Сейчас в теме
(15)Информация о хостингах интересная =)
17. PLAstic 253 06.08.18 10:18 Сейчас в теме
Фразы, подразумевающие гениальность идеи несколько раз встречаются в тексте статьи.
Давай разовьём её реальную полезность...

1) Почему доступность прокси определяется на боевой отправке? Зачем вы попусту тратите время доставки боевых сообщений?
Делаете фоновое задание, которое будет пробегаться по списку прокси и служебному пользователю слать сообщение. Так вы будете получать картину рабочих проксей на текущий момент в фоновом режиме.
2) Я бы добавил в алгоритм время следующего опроса прокси. Т.е. если у вас стабильно работал прокси, а потом не отвечает на запрос раз, второй, третий, то с каждым отлупом в непрерывной серии отлупов увеличивать время следующей проверки этого прокси, до максимум суток (например).

Ну и вообще, я бы рекомендовал не париться с проксями, а арендовать за 1200 руб/мес виртуалку в одной из западных республик, повесить на неё вебхук и наслаждаться моментальным общением с ботами.
CyberCerber; sound; altmf; +3 Ответить
18. altmf 46 06.08.18 10:52 Сейчас в теме
(17)
Фразы, подразумевающие гениальность идеи несколько раз встречаются в тексте статьи.

О гениальности речи нет, но если у вас есть предложения по приданию статье более сдержанной, на ваш взгляд, стилистики, то готов обсудить их в личке.
1. Я согласен с вами, что доступность прокси можно и нужно определять отдельно и пользоваться этой информацией. Однако в условиях когда в день таких сообщений отправляется в среднем несколько десятков (хотя исключения бывают, но касаются они технологических операций), а также потенциальная задержка в несколько минут устраивала, описанный выше способ отправки был признан приемлемым и мы переключились на другие задачи
2. Это тоже интересная идея, но как я сказал выше, устроил даже весьма топорный вариант.
19. pablo_escobar 06.08.18 19:29 Сейчас в теме
Попробовал общаться с ботом через прокси(нашел бесплатный попробовать), не работает пишет
Ошибка работы с Интернет: Ошибка инициализации SSL-соединения
, такую же ошибку выдает если без прокси пробовать, то есть блокирует провайдер. Включил впн все работает с этим прокси, да и через приложение на телефоне с ним работает. Прокси должен обладать какими то характеристиками чтобы провайдер не блокировал запросы? Пробовал на этом
ИнтернетПрокси.Установить("https", "socks5://93.88.75.208", 1080, , , Ложь);
21. Vainemeinen 79 08.08.18 16:05 Сейчас в теме
После блокировки Телеграма тоже написал подобную прослойку с отправкой через прокси, с той лишь разницей, что использовался не справочник, а регистр сведений, адреса проксей с socks5 загружал из открытых источников, и банил в регистре сведений, те адреса, через которые соединиться не получалось.
Так вот, в первую неделю все было замечательно, но потом абсолютно все свободные прокси оказались в бане - похоже РКН также пасет все свободные прокси и прикрывает их.
22. altmf 46 09.08.18 06:58 Сейчас в теме
(21)По поводу бана прокси-серверов РКН я, если честно, ожидал, что прокси будут баниться с завидным постоянством, однако нет, большая часть прокси, используемых в июне,жива до сих пор. Возможно это связано с тем, что к тому моменту активность РКН несколько снизилась.
23. uno-c 148 21.08.18 17:50 Сейчас в теме
Можно использовать Tor-browser. Ставите тор-браузер, запускаете - и в системе появляется локальный socks5 прокси, использующий сеть тор. Работает хорошо.
24. 🅵🅾️🆇 466 28.08.19 11:00 Сейчас в теме
Просто оставлю это тут
https://gist.github.com/PlugFox/5f62e43c56941e4c5a244de2422ee7f8

Пример отправки сообщений и файлов в телеграм (даже без задействования жесткого диска)
25. Diversus 2085 30.10.19 17:59 Сейчас в теме
Спасибо за труд, но мне кажется есть проблема с тем, что:
1. Регистр сведений СтатистикаОтправкиСообщенийВМессенджер имеет периодичность Секунда и если будет несколько запросов на отправку в секунду, то запись помещаться никуда не будет.
2. Нет преобразования GET-параметра text в формат URL.
26. Diversus 2085 15.11.19 19:03 Сейчас в теме
(0) Есть еще один тонкий момент. Есть два типа прокси SOCK5 и HTTPS. И в зависимости от типа прокси нужны разные варианты указания строки подключения. Причем в вашем случае вы по коду используете ТОЛЬКО HTTPS-прокси.
Вот мой вариант функции ПолучитьHTTPСоединениеСПрокси:
Функция ПолучитьHTTPСоединениеСПрокси(АдресСервера, Порт, Прокси) Экспорт
	
	Таймаут = Константы.TelegramTimeoutПодключений.Получить();
	Если Таймаут = 0 Тогда
		Таймаут = 30;
	КонецЕсли;
	
	Если Прокси = Неопределено Тогда
		Соединение = Новый HTTPСоединение(АдресСервера, Порт,,,,Таймаут,
			Новый ЗащищенноеСоединениеOpenSSL());
	Иначе
		ИнтернетПрокси = Новый ИнтернетПрокси(Ложь);
        
        АдресПрокси = СокрЛП(Прокси.Сервер);
		Если Прокси.Протокол = Перечисления.TelegramПроксиПротоколы.SOCKS5 Тогда
			АдресПрокси = "socks5://" + АдресПрокси;
		КонецЕсли;
		ИнтернетПрокси.Установить("https", АдресПрокси, Прокси.Порт, 
			СокрЛП(Прокси.Пользователь), СокрЛП(Прокси.Пароль), Ложь);
			
		Соединение  =  Новый HTTPСоединение(АдресСервера, Порт,,,ИнтернетПрокси,Таймаут,
			Новый ЗащищенноеСоединениеOpenSSL());
	КонецЕсли;
	
	Возврат Соединение;
	
КонецФункции
Показать

Я думаю по коду примерно понятно что к чему.
Оставьте свое сообщение

См. также

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    36798    unichkin    46    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    21997    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    20536    John_d    22    

Последовательности событий. Шпаргалка

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    15325    kuzyara    33    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    29314    tormozit    100    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    16250    YPermitin    72    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Практика программирования v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    7878    Sibars    19    

Вебхук. Путь Телеграма

Внешние источники данных Интеграция v8 Абонемент ($m)

Долгое (на самом деле нет) и нелегкое путешествие телеграма к неведомым (из за РКН) конфигурациям 1С. Памятка себе.

1 стартмани

03.10.2019    15974    platonov.e    18    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    77200    tormozit    131    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    30204    Yashazz    48    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    43650    rpgshnik    63    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    45279    ids79    54    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    47493    tormozit    40    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    26151    YPermitin    24    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    24831    YPermitin    80    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    30069    ids79    16    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    43808    tormozit    74    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    71980    ids79    49    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    31527    avalakh    22    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    21561    json    13    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    15847    m-rv    2    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    53213    ids79    11    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    33772    ids79    27    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    25126    YPermitin    14    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    19842    m-rv    17    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    19278    SeiOkami    50    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    41601    ids79    17    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    48844    ids79    25    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    29944    m-rv    21    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    23930    dmurk    144    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    40393    YPermitin    30    

Выполнение внешней обработки в фоновом задании

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    28399    Eret1k    23    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    27993    itriot11    34    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    34200    ellavs    126    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    26525    ellavs    88    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    30364    YPermitin    53    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    75461    Serginio    108    

Ошибки при работе с хранилищем конфигурации и способы их решения

Практика программирования v8 Бесплатно (free)

В статье собраны наиболее распространенные ошибки при работе с хранилищем конфигурации и способы их обхода и решения.

01.03.2019    35974    Смешной 1С    27    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

Практика программирования Vanessa Automation v8 Россия Бесплатно (free)

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    20948    Vladimir Litvinenko    27    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    33685    ids79    40    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    36837    ids79    9    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    28868    grumagargler    28    

EnterpriseData – часть 2. Процесс выгрузки данных

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    25754    ids79    31    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    39524    ids79    72    

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации

Практика программирования Обмен через XML v8 v8::УФ БП3.0 УТ11 Россия Бесплатно (free)

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    35864    ids79    40    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

Практика программирования v8 Бесплатно (free)

По роду своей деятельности, мне часто приходится обсуждать с программистами детали реализации той или иной функциональности. Очень часто, разговаривая даже с квалифицированными специалистами я сталкиваюсь с незнанием сути платформенной функциональности Повторного использования возвращаемых значений общих модулей. В данной статье я постараюсь дать краткий обзор и основные особенности этой функциональности.

04.09.2017    51780    m-rv    61    

Программное заполнение пользовательских параметров и отборов СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Публикация представляет из себя краткие примеры того, как можно заполнять параметры СКД программно так, чтобы все параметры и отборы были доступны в быстрых настройках и в обычных (типовых) настройках параметров и отборов СКД.

13.11.2018    43997    Unk92    21