Сейчас на форуме: _MBK_ (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Indy и передача кукисов
Посл.ответ Сообщение

Ранг: 1.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 декабря 2010 01:47
· Личное сообщение · #1

Извините что поднимаю столь давнюю тему.

Нужна помощь.
прога логинится позитивно на форум PhpBB, но при переходе на страницу с добавлением поста теряются куки и сессия обрывается Подскажите как правильно передать куки, если они изменяются постоянно.

Code:
  1. unit Unit1;
  2.  
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  9.   IdHTTP, ExtCtrls, OleCtrls, SHDocVw, IdCookieManager;
  10.  
  11. type
  12.   TForm1 = class(TForm)
  13.     Button1: TButton;
  14.     Edit1: TEdit;
  15.     Label1: TLabel;
  16.     Label2: TLabel;
  17.     Edit2: TEdit;
  18.     Label3: TLabel;
  19.     IdHTTP1: TIdHTTP;
  20.     Edit3: TEdit;
  21.     Label5: TLabel;
  22.     Memo1: TMemo;
  23.     Memo2: TMemo;
  24.     IdCookieManager1: TIdCookieManager;
  25.    function Pars(T_, ForS, _T: string): string;
  26.     procedure Button1Click(Sender: TObject);
  27.   private
  28.     { Private declarations }
  29.   public
  30.     { Public declarations }
  31.   end;
  32.  
  33. var
  34.   Form1: TForm;
  35.  
  36. implementation
  37.  
  38. {$*.dfm}
  39.  
  40. procedure TForm1.Button1Click(Sender: TObject);
  41. var StrPage, ssylka, PostPage, Token:string;
  42.       Data:TstringList;
  43.       CookMan: TidCookieManager;
  44. begin
  45.    CookMan:=TidCookieManager.Create(IdHTTP1);
  46.  IdHTTP1.CookieManager := CookMan;
  47.   IdHTTP1.AllowCookies := True;
  48.  
  49.  
  50.  idhttp1.HandleRedirects:=true;
  51.  StrPage:=idhttp1.Get('http://phpbb.pl/ucp.php?mode=login');
  52.  ssylka:=(Pars('name="sid" value="',StrPage,'"'));
  53.  Data:=TstringList.Create;
  54.  Data.Add('username='+Edit1.Text);
  55.  Data.Add('password='+Edit2.Text);
  56.  Data.Add('sid='+ssylka);
  57.  Data.Add('redirect=index.php');
  58.  Data.Add('login=Вход');
  59.  Memo2.Lines.Text:=idhttp1.Post('http://phpbb.pl/ucp.php?mode=login', Data);
  60.  
  61.  
  62.  {post}
  63. //здесь пытался куки настроить
  64.     IdHTTP1.Request.Host := 'phpbb.pl';
  65.     IdHTTP1.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13';
  66.     IdHTTP1.Request.Connection := 'Keep-Alive';
  67.     idHTTP1.Request.ContentType:= 'text/html';
  68.     IdHTTP1.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
  69.     IdHTTP1.Request.AcceptLanguage:='ru,en-us;q=0.7,en;q=0.3';
  70.     IdHTTP1.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7';
  71.     IdHTTP1.Request.Referer:= 'http://phpbb.pl/posting.php?mode=post&f=2';
  72.     IdHTTP1.Request.CustomHeaders.Text:= 'Cookies: style_cookie=null; phpbb3_j7sby_u=2; phpbb3_j7sby_k=; phpbb3_j7sby_sid='+ssylka;
  73.  
  74.  
  75.  PostPage:=idhttp1.Get('http://phpbb.pl/posting.php?mode=post&f=2');
  76.  showmessage(idhttp1.Response.RawHeaders.CommaText);
  77.  Token:=(Pars('name="form_token" value="',PostPage,'"'));
  78.  Data:=TstringList.Create;
  79.  Data.Add('icon=0');
  80.  Data.Add('subject=vlad');
  81.  Data.Add('addbbcode20=100');
  82.  Data.Add('message=The Best!');
  83.  Data.Add('lastclick=1292355023');
  84.  Data.Add('post=Отправить');
  85.  Data.Add('attach_sig=on');
  86.  Data.Add('topic_type=0');
  87.  Data.Add('topic_time_limit=0');
  88.  Data.Add('creation_time=1292355023');
  89.  Data.Add('form_token'+Token);
  90.  Data.Add('poll_max_options=1');
  91.  Data.Add('poll_length=0');
  92.  Memo1.Lines.Text:=idhttp1.Post('http://phpbb.pl/posting.php?mode=post&f=2', Data);
  93.  {/post}
  94.  if Pos('logout', StrPage)<>0 then
  95.  Label3.Caption:=Token
  96.  else Label3.Caption:='No';
  97.  
  98.  Data.Free;
  99.  
  100. end;
  101.  
  102. function TForm1.Pars(T_, ForS, _T: string): string;
  103. var
  104.   a, b: integer;
  105. begin
  106.   Result := '';
  107.   if (T_ = '') or (ForS = '') or (_T = '') then
  108.     Exit;
  109.   a := Pos(T_, ForS);
  110.   if a = 0 then
  111.     Exit
  112.   else
  113.     a := a + Length(T_);
  114.   ForS := Copy(ForS, a, Length(ForS) - a + 1);
  115.   b := Pos(_T, ForS);
  116.   if b > 0 then
  117.     Result := Copy(ForS, 1, b - 1);
  118. end;
  119.  
  120.  
  121. end.





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 15 декабря 2010 02:31
· Личное сообщение · #2

Правильнее забить на Indy и перейти на тот же Synapse например, с Indy сам ногти сгрыз с этими куками, работает не стабильно, через раз

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 15 декабря 2010 08:11
· Личное сообщение · #3

Не знаю как в Indy не использую этот убогий компонент. Там есть Контейнер куков, он привязывается к idHttp и всё работает автоматом. Для компонентов от FPiette я ставил обработчики на OnCookieRecv и на OnBeforeDataSend и там используя контейнер куков от инди добавлял куки в контейнер, при отправке извлекал куки из контейнера и дописывал в заголовок.

-----
Yann Tiersen best and do not fuck





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 15 декабря 2010 09:55
· Личное сообщение · #4

А при чём здесь вообще ревёрсинг и кодинг плюшек для форума на дельфях?


 eXeL@B —› Вопросы новичков —› Indy и передача кукисов
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати