Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [solved] Indy Cookies, сохранение кукисов. Indy Cookies, сохранение кукисов. 
V
    Опции темы
VZyablik
Дата 24.2.2015, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 24.2.2015

Репутация: нет
Всего: нет



Теория.

Для работы с куками indy использует компоненты класса TIdCookieManager.

Код
idhttp.CookieManager


TIdCookieManager содержит объект CookieCollection класса TidCookies. CookieCollection - массив.

Код
idhttp.CookieManager.CookieCollection


Каждый кукис имеет три обязательных значения. Это домен кукиса, название кукиса, значение кукиса.
Код
CookieManager.CookieCollection[i].Domain;
     CookieManager.CookieCollection[i].CookieName;
     CookieManager.CookieCollection[i].Value;


Каждый сайт(домен) видит только свои кукисы.



Это сообщение отредактировал(а) VZyablik - 24.2.2015, 02:16

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  u2_IDHTTP_Cookies.pas 3,00 Kb
PM MAIL   Вверх
VZyablik
Дата 24.2.2015, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 24.2.2015

Репутация: нет
Всего: нет



Процедура считывания кукисов из директории.
В директории должны быть только файлы кукисов.
Для получения списка файлов-кукисов из папки используется элемент FileListBox1, помещенный на форму.
Динамически создать элемент не получилось.

Домены "ya.ru" и  "www.ya.ru"  - различные.

Код

procedure u2_201_IdCookieManagerLoadFile(var IdCookieManager: TIdCookieManager; CookiesDirectory:string);
var
  temp: TStringList;
  i , j : integer;

   CookieFileName, CookieFile:string;
   CookieDomainURL:string;
   idURI:TIdURI;
begin

   form1.FileListBox1.Directory:=CookiesDirectory;
   temp  := TStringList.Create;
   idURI := TidURI.Create('http://google.com');

   for i := 0 to form1.FileListBox1.Count-1 do
   begin
      try
// получаем домен
        CookieFileName:=form1.FileListBox1.Items[i];
        CookieFile:=CookiesDirectory + CookieFileName;
        CookieDomainURL:='http://'+CookieFileName;

// создаем tidURI
        idURI := TidURI.Create(CookieDomainURL);

        temp.LoadFromFile(CookieFile);
// добавляем кукисы в домен
        for j := 0 to temp.Count - 1 do
          IdCookieManager.CookieCollection.AddServerCookie(temp[j], idURI);
      except
        on E : Exception do
        begin
        end;
      end;
   end;

 temp.Free;
 idURI.Free;
end;


Добавлено @ 02:10

Процедура сохранения кукисов в папку. 
Кукисы каждого домена сохраняются в отдельный файл. 

Процедура усложнена-оптимизирована, можно упростить за счет неоптимального чтения-записи файлов кукисов.

Код

procedure u2_200_IdCookieManagerSaveFile(var IdCookieManager: TIdCookieManager; CookiesDirectory:string);
var
  temp: TStringList;
  i: integer;
  CookiesDomain, CookiesDomainNext:string;

  CookieName,  CookieValue:string;

  CookieFile:string;

  CookiesSave:boolean;
begin

  temp := TStringList.Create;


  for i := 0 to IdCookieManager.CookieCollection.Count - 1 do
  begin
// добавляем куки  из IdCookieManager
     CookiesDomain:=IdCookieManager.CookieCollection[i].Domain;
     CookieName:=IdCookieManager.CookieCollection[i].CookieName;
     CookieValue:=IdCookieManager.CookieCollection[i].Value;

     temp.Values[CookieName]:=CookieValue;

// если куки с другого домена, то сохраняем старые куки в файле со старым названием,

     CookiesSave:=(i = IdCookieManager.CookieCollection.Count - 1);
     if not(CookiesSave) then
     begin
        CookiesDomainNext:=IdCookieManager.CookieCollection[i+1].Domain;
        CookiesSave:=(CookiesDomain<>CookiesDomainNext);
     end;

     if CookiesSave then
     begin
        CookieFile:=CookiesDirectory+CookiesDomain;
        temp.SaveToFile(CookieFile);
        temp.Clear;
     end;
  end;
//
  temp.Free;
end;



Добавлено @ 02:14
Рабочий модуль



Это сообщение отредактировал(а) VZyablik - 24.2.2015, 10:16
PM MAIL   Вверх
VZyablik
Дата 24.2.2015, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 24.2.2015

Репутация: нет
Всего: нет



Большое спасибо CodeGold за рабочий алгоритм 

http://forum.vingrad.ru/forum/topic-134261.html

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.