Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как мне проверить программу


Автор: eViperEA 15.3.2008, 13:35
Я хочу написать программу которая автоматически логинится на сайте... 
Полазил по форуму и вот что у меня получилось 
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl,
  IWTreeview, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    IdHTTP1: TIdHTTP;
    WebBrowser1: TWebBrowser;
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
S: TStringList;
begin
memo1.Text:= IdHTTP1.Get('http://server.ru/index.php');
S:= TStringList.Create;
S.Add('success_url=');
S.Add('fail_url=');
S.Add('try_to_login=1');
S.Add('Login=eViper');
S.Add('password=eeeeee');
memo1.Text:=IdHTTP1.Post('http://server.ru/index.php?t=login', S);
end;
end.

Вроде бы никаких ошибок не выдает но я не знаю как мне проверить действительно ли он логинится ... 
Было бы хорошо еслиб вы мне подсказали как отобразить страничку в проге чтоб я видел что он зашел... и от туда начал работать...

Автор: creas0ft 15.3.2008, 14:16
Код

memo1.Text:=IdHTTP1.Post('http://server.ru/index.php?t=login', S);
memo1.lines.savetofile('c:\test.html');

ну и смотри код )

p.s. да и зачем тебе первый get? И куда куки дел?! ;)

Автор: eViperEA 15.3.2008, 16:01
Цитата(creas0ft @ 15.3.2008,  14:16)
Код

memo1.Text:=IdHTTP1.Post('http://server.ru/index.php?t=login', S);
memo1.lines.savetofile('c:\test.html');

ну и смотри код )

p.s. да и зачем тебе первый get? И куда куки дел?! ;)

 smile  Прописал строчку.. Он мне сохранил файл на с ... Зашел а там страничка которая ввод логин пароля предлагает... Возможно я чтото не так сделал?? 

Автор: creas0ft 15.3.2008, 16:41
добавь менеджере печенек - свяжи его с http и сделай тоже самое, "убив" первый get.
Если и опять не та страница будет, надо снифить что передает браузер.

Автор: eViperEA 15.3.2008, 18:58
Вставил куки менеджр и он все равно не заходит... 
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl,
  IWTreeview, OleCtrls, SHDocVw, IdCookieManager;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    IdHTTP1: TIdHTTP;
    WebBrowser1: TWebBrowser;
    IdCookieManager1: TIdCookieManager;
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
S: TStringList;
begin
S:= TStringList.Create;
S.Add('Login=xxx');
S.Add('password=xxx');
memo1.Text:=IdHTTP1.Post('http://forum.trktvs.ru/index.php?t=login', S);
memo1.lines.savetofile('c:\test.html');
end;
end.

А вот код страницы...
Код

<tr class="RowStyleB">
<td class="GenText">Имя пользователя</td><td><input type="text" tabindex="1" name="login"></td>
<td nowrap><a href="index.php?t=register&amp;">Хотите зарегистрироваться?</a></td></tr>
<tr class="RowStyleA"><td class="GenText">Пароль:</td><td><input type="password" tabindex="2" name="password"></td>
<td nowrap><a href="index.php?t=reset&amp;">Я забыл пароль</a></td></tr>
<tr><td colspan=3 class="RowStyleA ar"><input type="submit" class="button" tabindex="3" value="Вход"></td></tr>

Автор: creas0ft 15.3.2008, 19:13
надо всю форму показывать а не так.
Ставь fiddler http://www.fiddlertool.com/fiddler/ - с ним все понятнее будет

Добавлено через 2 минуты
там 5 полей
login
passsword
submit
SQ
adm
их кто передавать будет?!

Автор: eViperEA 15.3.2008, 19:48
Цитата(creas0ft @ 15.3.2008,  19:13)
надо всю форму показывать а не так.
Ставь fiddler http://www.fiddlertool.com/fiddler/ - с ним все понятнее будет

Добавлено @ 19:15
там 5 полей
login
passsword
submit
SQ
adm
их кто передавать будет?!

Извиняюсь... и Как мне с ними справиться? я знаю только логин и пароль... smile 

Автор: creas0ft 15.3.2008, 19:57
так поставь снифер что я дал выше, и узнаешь что в тех полях надо передать ;)

Автор: eViperEA 16.3.2008, 08:08
Скажу чесно( Пытался в нем разобраться ничего не вышло smile 
Как в нем работать? smile (и как он может помочь...)
 smile 

Автор: MetalFan 16.3.2008, 11:24
Цитата(eViperEA @  16.3.2008,  08:08 Найти цитируемый пост)
 (и как он может помочь...)

показать, что посылает браузер при логине.

Цитата(eViperEA @  16.3.2008,  08:08 Найти цитируемый пост)
Как в нем работать? 

настраиваешь проксю на локальный адрес и порт 8888 и фидлер будет показывать что куда от кого пошло

Автор: eViperEA 16.3.2008, 17:41
В общем вот что то я там нашел.. 
Когда залогинился он мне с левой сторороный написал 2е новых строчки ... 
HTTP forum.trktvs.ru /index.php?t=login 
там во вкладке TextView строчка login=xxx&password=xxx&SQ=0&adm=
в WebForms в разделе боде собсно тоже самое ... 
вторая строчка как я понял это он меня на страницу послал... 
HTTP forum.trktvs.ru /index.php?t=index&

попробовал написать код... 
Код

procedure TForm1.Button1Click(Sender: TObject);
var
S: TStringList;
begin
S:= TStringList.Create;
S.Add('login=eViper');
S.Add('password=wsadeds');
s.Add('SQ=0');
s.Add('adm=');
memo1.Text:=IdHTTP1.Post('http://forum.trktvs.ru/index.php?t=login&', S);
memo1.lines.savetofile('c:\test.html');
end;

end.

И он мне выдал ошибку.. smile  smile  smile 
HTTP/1.1 302 found Как мне с ней справиться?
Вот на всякий случай исходник...

Автор: creas0ft 16.3.2008, 17:48
handleredirects = true в свойствах поставить http 

Автор: eViperEA 16.3.2008, 18:03
Спасибо!!! заработало...  но только с форумом((( 
а вот на этом сайте чета не хочет...
Код

<center><b>Login</b></center>
<hr>
<center><form action=login.php method=post name=login onsubmit="return saveme();">
Username: <input type=text name=username><br>
Password: <input type=password name=password bgcolor=585858><br>
Remember me?<br />
<input type="radio" value="true" name="save">Yes <input type="radio" name="save" value="false" 
checked>No

<input type=submit value=Submit><br><a href=recpass.php>Forget Your Password?</a></form><font 
size=+1><center><a href='signup.php'><img src=h3_signup.gif alt='Sign Up Now!'></a></center>
</center></font></br><hr></br><hr>
<center><b>Updates</b></center>
<hr>

Сайт высылает username=eViperEA&password=xxx&save=false
я соответственно написал 
Код

S.Add('username=eViperEA');
S.Add('password=xxx');
s.Add('save=false');

Но он не заходит... в сохраненном файле memo1.lines.savetofile('c:\test.html'); показывает все без картинок и незалогининную страницу..
возможно это по тому что он заходит сначало на http://www.advercash.net/login.php (как на
временную страницу) а затем на http://www.advercash.net/adverts.php
Как с этим бороться ? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)