IPConnection.Create

From SunFlurry wiki
Jump to: navigation, search
  Create (Создание неактивного объекта)
Объект:Объект IP
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Визуальность:Нет

Функция создает неактивный объект соединения, который затем можно использовать, к примеру, для задания прокси сервера и дальнейшего соединения с удаленным сервером.

Синтаксис

IPConnection.Create():<Новое неактивное соединение (IPOBJECT)>

Возвращаемое значение

Возвращается новый неактивный объект IP.

Примеры

//Измененный пример из статьи 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);