IPConnection.Connect
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);