Здравствуйте, хочу научиться для себя парсить сайты с помощью Synapse. В качестве примера взял сайт pikabu. Снифером внимательно отследил данные, отправил их методом POST, залогинелся, но вот как уже под своим логином перейти на другую страницу этого ресурса и выгрузить html код страницы?
Попробовал реализовать следующим образом:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, httpsend, ssl_openssl, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
mmo1: TMemo;
edt1: TEdit;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function FoundLocationStrNum(Headers: TStringlist): integer;
var
FoundStrPos, i: integer;
begin
Result := -1;
for i := 0 to Headers.Count do
begin
FoundStrPos := Pos('Location: ', Headers.Strings[i]);
if FoundStrPos > 0 then
begin
Result := i;
exit;
end;
end;
end;
function GetHTTPStr(http: THTTPSend): string;
var
BodyStream: TStringStream;
BodyS: TStringList;
begin
try
BodyS := TStringList.Create;
BodyStream := TStringStream.Create(result);
begin
BodyS.LoadFromStream(http.Document);
result := BodyS.Text;
end;
finally
BodyStream.Free;
BodyS.Free;
end;
http.Document.Seek(0, soFromBeginning);
end;
procedure TForm1.btn1Click(Sender: TObject);
var
httpsend: THTTPSend;
stream: TStringStream;
n: integer;
NewURL, result: string;
Res: boolean;
begin
httpsend:= THTTPSend.Create;
stream := TStringStream.Create('');
stream.WriteString('mode=login&username=***&password=***&remember=1');
Application.ProcessMessages;
httpsend.MimeType := 'application/x-www-form-urlencoded';
httpsend.Document.LoadFromStream(stream);
Res := httpsend.HTTPMethod('post', 'http://pikabu.ru/ajax/ajax_login.php');
Application.ProcessMessages;
case httpsend.ResultCode of
301, 302, 307:
begin
n := FoundLocationStrNum(httpsend.Headers);
if (n >= 0) and (n <= httpsend.Headers.count) then
begin
httpsend.Clear;
httpsend.HTTPMethod('GET', edt1.Text);
Application.ProcessMessages;
mmo1.Lines.Text := GetHTTPStr(httpsend);
Application.ProcessMessages;
end;
end;
end;
httpsend.HTTPMethod('GET', edt1.Text);
Application.ProcessMessages;
mmo1.Text:=Utf8ToAnsi(GetHTTPStr(httpsend));
end;
end.
Но в итоге в memo выгрузилось вот это:
Цитата:
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
|
Что нужно поправить?