Опишу проблему. Я пытаюсь сделать что-то более-менее интересное. Но пока ничего не получается. Т е у меня есть программа в которой нужно перейти по ссылке находясь на сайте авторизованным, модуль в котором есть авторизация. Но после успешной авторизации я никак не могу получить куки и использовать их в дальнейшем. Т е я в программе нажимаю Button1, авторизуюсь успешно. Затем нажимаю Button2 и соответственно не могу перейти по ссылке, так как я оказываюсь неавторизованным.
У меня есть одно, на мой взгляд решение проблемы: это работать без подпрограмм и использовать не "динамические" компоненты Indy а просто выставить их на форму и работать с idhttp1 все время, и авторизоваться в нем и переходить по ссылке, наверное так получится.
НО!
Я собираюсь делать первый большой(для меня) проект с сетями, и мне не удобно все функции и процедуры делать по нажатию на кнопки и пр. Мне бы хотелось так как я уже начал.
П. С. В основной программе есть процедура перехода по ссылке, ее тоже позже вынесу в тот модуль, где авторизация, как только все получится.
Помогите пожалуйста)) Коды ниже.
Коды программ:
Модуль авторизации:
Code
function DruzLOG(Login, Password:string; CM: TIdCookieManager): string;
var s:TStringList; c:string;
Comp: TIdHTTP;
begin
Result:='';
s := TStringList.Create;
comp:=TIdHTTP.Create(nil);
CM := TidCookieManager.Create(comp);
comp.AllowCookies := true;
comp.CookieManager := CM;
comp.HandleRedirects:= True;
s.add('ref=');
s.add('login='+login);
s.add('password='+password);
s.add('Ok=Войти');
C:=comp.post('http://vkrugudruzei.ru/login.asp', s);
if pos('http://vkrugudruzei.ru/exit.asp', c)<>0 then
Result:=('Все хорошо. Авторизация прошла.')
else Result:=('Все плохо. Авторизация не прошла.');
comp.Free;
s.Free;
end;
Код самой программы:
Code
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, druzlib, StdCtrls, lib, IdHTTP, IdCookieManager,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Memo1: TMemo;
Label3: TLabel;
Memo2: TMemo;
Label4: TLabel;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
cook:TIdCookieManager;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
memo1.Clear;
end;
Function druzpoisk:string;
var c:string;
Comp1: TIdHTTP;
begin
result:='';
comp1:=TIdHTTP.Create(nil);
comp1.HandleRedirects:= True;
cook:= TidCookieManager.Create(comp1);
comp1.CookieManager := cook;
c:=comp1.get('http://vkrugudruzei.ru/search/');
if pos('<label for="photos">показывать с фотографией</label><br />', c)<>0 then
result:=('Страница поиска открылась') else
result:=('Страница поиска не открылась');
comp1.Free;
c:='';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Add(DruzLog(Edit1.text, Edit2.text, cook));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Lines.add(druzpoisk);
end;
end.