Difference between revisions of "IPConnection.Connect"
m (1 revision imported) |
1>Admin |
||
| Line 17: | Line 17: | ||
== Синтаксис == | == Синтаксис == | ||
<code> | <code> | ||
| − | {{Grey|IPConnection.}}'''Connect'''(''<Адрес соединения (STRING)>''{{Optional|,<Блокирующий ли это сокет (INT)>{{Default|{{Eq}}0}},<Тип соединения (INT)>{{Default|{{Eq}}0}}}}):''<Новое соединение | + | {{Grey|IPConnection.}}'''Connect'''(''<Адрес соединения (STRING)>''{{Optional|,<Блокирующий ли это сокет (INT)>{{Default|{{Eq}}0}},<Тип соединения (INT)>{{Default|{{Eq}}0}}}}):''<Новое соединение (IPOBJECT)>'' |
</code> | </code> | ||
| Line 28: | Line 28: | ||
==== Возвращаемое значение ==== | ==== Возвращаемое значение ==== | ||
| − | Возвращается новый объект IP. В случае, если соединение было успешным, объект соединен, иначе объект | + | Возвращается новый объект IP. В случае, если соединение было успешным, объект соединен, иначе объект неактивен. |
== Примеры == | == Примеры == | ||
Revision as of 18:41, 10 November 2021
| Connect (Установка соединения) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Функция производит соединение TCP/IP с удаленным сервером, после установки соединения никакой дополнительной информации не отсылается.
Синтаксис
IPConnection.Connect(<Адрес соединения (STRING)>,<Блокирующий ли это сокет (INT)>=0,<Тип соединения (INT)>=0):<Новое соединение (IPOBJECT)>
Аргументы
<Адрес соединения (STRING)>- Адрес соединения задается в виде<Доменное имя сервера, адрес IPv4 или IPv6>[:<Номер порта>](примеры:127.0.0.1:80,en.wikipedia.org:443,москва.рф:443,::1=80). При указании IP адреса (xxx.xxx.xxx.xxxилиxxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx), можно использовать квадратные скобки [, ] для отделения IP адреса от номера порта. Номер порта можно указывать после знака : или знака =, для IPv6 адресов можно использовать только знак = или использовать квадратные скобки, как разделитель, так как : занят для указания элементов адреса (примеры:127.0.0.1=80,[::1]:443). Если номер порта в адресе не задан, используется порт 80. Доменное имя будет автоматически закодировано в формат Punycode, если в нем присутствуют международные символы, однако, нужно помнить, что при формировании http заголовка поле Host необходимо также кодировать с помощью Punycode (см. пример ниже).<Блокирующий ли это сокет (INT)>- (необязательный аргумент) Указание на то, будет ли созданное соединение блокирующим. Блокирующие соединения не имеют доступа к ряду функций (к примеру Receive или Peek). По умолчанию, используется не блокирующее соединение.<Тип соединения (INT)>- (необязательный аргумент) Указывает на тип (протокол) соединения. Нужно заметить, что если аргумент адрес соединения использует нотацию IPv6 или доменное имя возвратит только IPv6 адрес (у сервера отсутствует IPv4 адрес), значение этого аргумента будет проигнорировано и будет использован протокол IPv6, и наоборот, если тип соединения подразумевает IPv6, однако можно осуществить соединение только на IPv4, аргумент будет проигнорирован. Чтобы узнать, по какому протоколу осуществлено соединение, можно использовать атрибут IsIPv6. Доступны следующие значения аргумента:- 0 (по умолчанию) -- Будет использован протокол IPv4
- 1 -- Будет использован протокол IPv6
Возвращаемое значение
Возвращается новый объект IP. В случае, если соединение было успешным, объект соединен, иначе объект неактивен.
Примеры
//Пример показывает, как можно осуществить загрузку веб-страницы по ее адресу.
//Для загрузки по протоколу 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
if bHTTPs Then
tcp:=IPConnection.Connect(URL+?(Pos(":",URL)+Pos("=",URL)=0,"=443"),1);
Else
tcp:=IPConnection.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);