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);