Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2011, 13:12   #1
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию страная авторизация

есть код, который авторизирует на саете
Код:
unit Unit1;

interface

uses
  IdHTTP,
  Dialogs,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  IdHTTP: TIdHTTP;
  stringstream: TStringStream;
  i: Integer;
begin
  IdHTTP:=TIdHTTP.Create(nil);
  IdHTTP.AllowCookies:=True;
  IdHTTP.HandleRedirects:=True;
  stringstream:=TStringStream.Create('username=''&password=''');
  try
    IdHTTP.Request.ContentType:='application/x-www-form-urlencoded';
    IdHTTP.Request.ContentLength:=stringstream.Size;
    IdHTTP.Post('http://сайт.ru/login.php?do=login', stringstream);
    Edit1.Text:='';
    for i:=0 to IdHTTP.CookieManager.CookieCollection.Count-1 do
      Edit1.Text:=Edit1.Text+IdHTTP.CookieManager.CookieCollection[i].CookieName+'='+IdHTTP.CookieManager.CookieCollection[i].Value+';';
  finally
    stringstream.Free;
    IdHTTP.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  IdHTTP: TIdHTTP;
begin
  IdHTTP:=TIdHTTP.Create(nil);
  // руками добавим cookie
  IdHTTP.AllowCookies:=False;
  IdHTTP.HandleRedirects:=True;
  try
    IdHTTP.Request.CustomHeaders.Add('Cookie: '+Edit1.Text);
    Memo1.Text:=IdHTTP.Get('http://сайт.ru/');
  finally
    IdHTTP.Free;
  end;
end;

end.
но если его использовать так, то не работает
Код:
unit Unit1;

interface

uses
  IdHTTP,
  Dialogs,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses IdCookieManager, IdCookie;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  IdHTTP: TIdHTTP;
  stringstream: TStringStream;
  i: Integer;
begin
  IdHTTP:=TIdHTTP.Create(nil);
  IdHTTP.AllowCookies:=True;
  IdHTTP.HandleRedirects:=True;
  stringstream:=TStringStream.Create('username=''&password=''');
  begin
    IdHTTP.Request.ContentType:='application/x-www-form-urlencoded';
    IdHTTP.Request.ContentLength:=stringstream.Size;
    IdHTTP.Post('http://сайт.ru/login.php', stringstream);
    Edit1.Text:='';
    for i:=0 to IdHTTP.CookieManager.CookieCollection.Count-1 do
      Edit1.Text:=Edit1.Text+IdHTTP.CookieManager.CookieCollection[i].CookieName+'='+IdHTTP.CookieManager.CookieCollection[i].Value+';';
//    stringstream.Free;
//    IdHTTP.Free;
//  IdHTTP.AllowCookies:=False;
    IdHTTP.Request.CustomHeaders.Add('Cookie: '+Edit1.Text);
    IdHTTP.Get('http://сайт.ru/');
end;
end;
end.
Почему?

Последний раз редактировалось bulldog5293; 10.02.2011 в 14:09.
bulldog5293 вне форума Ответить с цитированием
Старый 10.02.2011, 14:22   #2
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

Возможно параметры передаете непрвильно (username=''&password='')
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 10.02.2011, 14:37   #3
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

в снифере смотрел передаваемый параметр правельный, просто если на 2 кнопки раскидать то работает, на одной кнопке не хочет
bulldog5293 вне форума Ответить с цитированием
Старый 10.02.2011, 15:27   #4
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

а в снифере параметры одинаковые передаются если авторизоваться первым способом и вторым?
fate вне форума Ответить с цитированием
Старый 10.02.2011, 16:26   #5
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

да, только при пост запроси разный код рецидива выдаёт, в первом случае 578 на сайте авторизирован, но после пост запроса соединение закрыто, хотя на страницу ака попадаю, а во втором случае при гет запросе ака выдаётся рецидив 549 и идёт редирект на авторизацию
bulldog5293 вне форума Ответить с цитированием
Старый 10.02.2011, 18:25   #6
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Может проблема в том, что куки передаются 2 раза ( IdHTTP.AllowCookies:=True; + IdHTTP.Request.CustomHeaders.Add('C ookie: '+Edit1.Text);) ? Попробуйте перед строчками
Код:
    IdHTTP.Request.CustomHeaders.Add('Cookie: '+Edit1.Text);

    IdHTTP.Get('http://сайт.ru/');
Пересоздать IdHTTP.
kangreon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обычная авторизация или авторизация на уровне браузера? calugin Безопасность, Шифрование 0 13.01.2011 00:34
авторизация fAtliNg Работа с сетью в Delphi 6 14.08.2010 20:14
Авторизация doniyor JavaScript, Ajax 1 07.11.2009 21:13
Авторизация justas Работа с сетью в Delphi 0 21.12.2007 16:16