IPConnection.UseProxy
Revision as of 19:29, 10 November 2021 by 1>Admin
| UseProxy (Задает прокси сервер для соединения) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Функция настраивает прокси сервер для использования с данным соединением. Функция должна быть вызвана до фактического соединения с удаленной стороной на неактивном объекте, затем этот объект может использоваться совместно с функцией Connect. Для получения неактивного объекта соединения необходимо использовать функцию Create. Прокси сервер может быть использован как для прямых, так и для шифрованных соединений. Причем, SOCKS прокси работает для любых передач, а WEB прокси только для работы с Web-запросами (функции группы HTTP).
Синтаксис
IPConnection.UseProxy(<Адрес и порт прокси сервера (STRING)>,<Тип прокси сервера (STRING)>,<Имя пользователя прокси (STRING)>,<Пароль пользователя прокси (STRING)>,<Дополнительные параметры прокси (STRING)>)
Аргументы
<Адрес и порт прокси сервера (STRING)>- Адрес прокси сервера задается в виде<Доменное имя сервера, адрес IPv4 или IPv6>[:<Номер порта>](примеры:127.0.0.1:8080,webproxy.orgname.local:200, <::1=8080). При указании IP адреса (xxx.xxx.xxx.xxxилиxxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx), можно использовать квадратные скобки [, ] для отделения IP адреса от номера порта. Номер порта можно указывать после знака : или знака =, для IPv6 адресов можно использовать только знак = или использовать квадратные скобки, как разделитель, так как : занят для указания элементов адреса (примеры:127.0.0.1=8080,[::1]:2020). Если номер порта в адресе не задан, используется порт 8080. Доменное имя будет автоматически закодировано в формат Punycode.<Тип прокси сервера (STRING)>- Указание на тип используемого прокси сервера. Возможны следующие значения:- SOCKS4 -- для данного типа прокси не может использоваться пароль (имя пользователя можно передать). Прокси сервер работает только с IPv4 и требует прямое указание на IP-адрес с которым будет происходить соединение. Если для идентификации удаленной стороны при соединении используется URL нотация, а не IP-адрес, система автоматически в момент соединения попытается ее превратить в IP и передать прокси. Если DNS-серверы в сети недоступны, соединение не будет выполнено.
- SOCKS4A -- является дополнением к SOCKS4, позволяющим передавать на прокси сервер не только IP-адрес соединения, но и URL. В случае, когда в сети недоступны DNS-серверы, прокси-соединение будет продолжать работать корректно.
- SOCKS5 -- является развитием SOCKS4, позволяющим задавать пароль и использовать IPv6.
- HTTP или HTTPS -- равнозначные указания на Web-прокси (HTTP прокси может использоваться для нешифрованных соединений и наоборот), который может использоваться для доступа к Web-страницам. При указании этого типа сервера, пятый аргумент функции задает метод аутентификации (см. ниже).
<Имя пользователя прокси (STRING)>- (необязательный аргумент) Задает имя пользоваля прокси сервера.<Пароль пользователя прокси (STRING)>- (необязательный аргумент) Задает имя пароль прокси сервера (не используется для серверов SOCKS4(A).<Дополнительные параметры прокси (STRING)>- (необязательный аргумент) Задает дополнительные параметры в зависимости от типа прокси-сервера. Возможны следующие значения аргумента:- Для HTTP или HTTPS серверов параметр задает метод аутентификации и может принимать значения:
- Basic -- (по умолчанию) простой метод аутентификации, передающий имя пользоваля и пароль в заголовке HTTP пакета.
- Bearer -- (планируется к реализации) аутентификация с помощью особой строки (токена), полученного от прокси-сервера ранее и имеющего определенный срок жизни.
- OAuth -- (планируется к реализации) аутентификация, не передающая в заголовке прямым текстом имя пользоваля и пароль, а только их хеш. Позволяет не опасаться, что пароль станет известен третьим лицам, если прокси сервер находится в Интернете.
- SCRAM-SHA-1 или SCRAM-SHA-256 -- (планируется к реализации) методы аутентификации, позволяющие использовать хеши, ключи и шифрование.
- Для HTTP или HTTPS серверов параметр задает метод аутентификации и может принимать значения:
Примеры
//Измененный пример из статьи Connect показывает, как можно осуществить загрузку веб-страницы по ее адресу посредством SOCKS5 прокси сервера.
//Для загрузки по протоколу https требуется указание пути к библиотекам OpenSSL или LibreSSL.
Function LoadPage(URL)
bHTTPs:=pos("https://",Lowercase(URL));
If pos("//",URL)>0 Then
tearStr(URL,"//");
EndIf;
СтрДоб:=URL;
URL:=tearStr(СтрДоб,"/");
//URL может содержать название параграфа
СтрДоб:=TearStr(СтрДоб,"#");
For i:=1 to 3 Do
//Создаем неактивное соединение
tcp:=IPConnection.Create();
//Задаем прокси сервер для текущего соединения
tcp.UseProxy("192.168.1.1:8080","SOCKS5","User","test123");
if bHTTPs Then
tcp.Connect(URL+?(Pos(":",URL)+Pos("=",URL)=0,"=443"),1);
Else
tcp.Connect(URL+?(Pos(":",URL)+Pos("=",URL)=0,"=80"));
EndIf;
if tcp.IsConnected Then
Break;
EndIf;
EndDo;
if not tcp.IsConnected Then
Message("Could not connect: "+URL,"!");
Exit;
EndIf;
СтрДоб:="/"+СтрДоб;
if bHTTPs then
//tcp.InitEncryption("LibreSSL","C:\LibreSSL255\libtls-15.dll");
tcp.InitEncryption("OpenSSL","C:\OpenSSL111e\libssl-1_1.dll");
endif;
tcp.HTTPSetOperation("GET "+СтрДоб+" HTTP/1.0");
tcp.HTTPSetHeaderField("Host",tcp.HTTPPunycodeEncode(URL));
tcp.HTTPSetHeaderField("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
tcp.HTTPSetHeaderField("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
tcp.HTTPSetHeaderField("Accept-Language","en");
tcp.HTTPSetHeaderField("Connection","Close");
Стр:="";
Try
If tcp.HTTPSendAndReceive Then
Стр:=tcp.HTTPBodyAsString;
If _And(Pos(_NEWLINE,Стр)=0,Pos(Chr(10),Стр)>0) Then
Стр:=Replace(Стр,Chr(10),_NEWLINE);
EndIf;
EndIf;
Except
Message("Could not load: "+URL,"!");
EndTry;
Exit Стр;
EndFunction
s:=LoadPage("https://en.wikipedia.org/wiki/Main_Page");
Message(s);