Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.12.2013, 18:01
Taemin Taemin вне форума
Прохожий
 
Регистрация: 07.02.2012
Сообщения: 45
Репутация: 10
По умолчанию Простой парсинг

Здравствуйте, хочу научиться для себя парсить сайты с помощью 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>
Что нужно поправить?
Ответить с цитированием
 


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter