Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.03.2019, 13:00
VolodinAS VolodinAS вне форума
Прохожий
 
Регистрация: 16.07.2017
Сообщения: 23
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию Как лучше всего соединяться с сервером?

К примеру есть сайт с сообщениями. К сожалению, у сайта нет апи для работы с сообщениями, поэтому, это будет парсер данных. Допустим, мне надо на делфи написать что-то вроде мессенджера. Для этого мне потребуется соединяться с сервером.

К примеру, мне нужно соединяться с сайтом каждую минуту для проверки сообщений. Как лучше это осуществлять? Через какой компонент?
Ответить с цитированием
  #2  
Старый 31.03.2019, 13:07
VolodinAS VolodinAS вне форума
Прохожий
 
Регистрация: 16.07.2017
Сообщения: 23
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

В дополнение ко всему, я себе как-то давно написал юнит, в котором представил 2 функции - для get и post запросов

Код:
unit _SendRequest;

interface

uses
  IdURI,

  Classes,

  IdCookieManager, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,

  System.SysUtils,

  WinInet;

function SendPostRequest(URL: String; Params: TStringList; cookie_dir: String; domain: String): String;
function StreamRequest(URL: String; Stream: TStream): Boolean;
function SendGetRequest(URL: String; cookie_dir: String): String;

procedure IdCookieManagerSaveFile(IdCookieManager: TIdCookieManager; dir: string);
function IdCookieManagerLoadFile(IdCookieManager: TIdCookieManager; domain, dir: string): TIdCookieManager;

implementation

uses
  Main;

function SendPostRequest(URL: String; Params: TStringList; cookie_dir: String; domain: String): String;
var
  IdHTTP: TIdHTTP;
  IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
  IdCookieManager: TIdCookieManager;
  urlRequest: String;
begin
  urlRequest := URL;

  try
    IdHTTP := TIdHTTP.Create;
  except
    on E: Exception do begin
      Result := 'ERRORMESSAGE: ' + E.Message
    end;
  end;

  IdHTTP.ConnectTimeout := 5000;

  try
    IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36';
    IdHTTP.Request.AcceptLanguage := 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3';
    IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create;
    IdCookieManager := TIdCookieManager.Create;
    IdHTTP.CookieManager := IdCookieManager;
    IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;

    try
      Result := Trim(IdHTTP.Post(urlRequest, Params));
    except
      on E: Exception do begin
        Result := 'ERRORMESSAGE: ' + E.Message;
        IdHTTP.Free;
      end;
    end;


    //Result := urlRequest;
  finally
    IdHTTP.Free;
    IdSSLIOHandlerSocketOpenSSL.Free;
    IdCookieManager.Free;
  end;
end;



function StreamRequest(URL: String; Stream: TStream): Boolean;
var
  IdHTTP: TIdHTTP;
  IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
  IdCookieManager: TIdCookieManager;
  urlRequest: String;
begin
  urlRequest := URL;

  try
    IdHTTP := TIdHTTP.Create;
  except
    on E: Exception do begin
      Result := False;
    end;
  end;

  IdHTTP.ConnectTimeout := 5000;

  try
    IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36';
    IdHTTP.Request.AcceptLanguage := 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7';
    IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create;
    IdCookieManager := TIdCookieManager.Create;
    IdHTTP.CookieManager := IdCookieManager;
    IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;

    try
      //ShowMessage(URL);
      IdHTTP.Get(urlRequest, Stream);
      Result := True;
    except
      on E: Exception do begin
        Result := False;
        IdHTTP.Free;
      end;
    end;


    //Result := urlRequest;
  finally
    IdHTTP.Free;
    IdSSLIOHandlerSocketOpenSSL.Free;
    IdCookieManager.Free;
  end;
end;

function SendGetRequest(URL: String; cookie_dir: String): String;
var
  IdHTTP: TIdHTTP;
  IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
  IdCookieManager: TIdCookieManager;
  urlRequest: String;
begin
  urlRequest := URL;

  try
    IdHTTP := TIdHTTP.Create;
  except
    on E: Exception do begin
      Result := 'ERRORMESSAGE: Cant init IdHTTP';
    end;
  end;

  IdHTTP.ConnectTimeout := 5000;

  try
    IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36';
    IdHTTP.Request.AcceptLanguage := 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3';
    IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
    IdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
    IdCookieManager := TIdCookieManager.Create;
    IdHTTP.CookieManager := IdCookieManager;
    IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;

    try
      //ShowMessage(URL);
      Result := IdHTTP.Get(urlRequest);

      IdCookieManagerSaveFile(IdCookieManager, cookie_dir);
      //Result := True;
    except
      on E: Exception do begin
        Result := 'ERRORMESSAGE: ' + E.Message;
        IdHTTP.Free;
      end;
    end;


    //Result := urlRequest;
  finally
    IdHTTP.Free;
    IdSSLIOHandlerSocketOpenSSL.Free;
    IdCookieManager.Free;
  end;
end;

end.

Типа, чтобы через 1 вызов облегчить обращение к собираемым данным. Я не знаю, правильный ли это подход или нет - нужен Ваш совет.

К тому же, как я понял, мне требуется авторизация на основе одних и тех же кук, но я так понимаю, при idhttp.free куки сбрасываются, и при новом соединении генерируются по новой (например, тот же PHPSESSID). Как правильно поступать в таких случаях?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter