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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.11.2013, 17:24
Harima Hario Harima Hario вне форума
Прохожий
 
Регистрация: 28.02.2011
Сообщения: 27
Репутация: 10
По умолчанию Парсер на Синапсе

Учусь делать парсер на примере сайта http://brain.kiev.ua.
Есть код товара, есть форма поиска. Вводишь в неё код, осуществляешь переход и выгружаешь исходник в мемо.

Проанализировал снифером:
http://piccy.info/view3/5383603/7e8c...1bbf21fb30c70/

Откуда брать значения order.x и order.y я не понимаю... они генерируются каждый раз случайным образом, а в исходном коде стартовой страницы их нет... вот такие пироги ( указываю случайные числа - не помагает

Код:
stream.WriteString('swords='+edt1.Text+'+&order.x=11&order.y=14');
Ответить с цитированием
  #2  
Старый 05.11.2013, 02:37
Harima Hario Harima Hario вне форума
Прохожий
 
Регистрация: 28.02.2011
Сообщения: 27
Репутация: 10
По умолчанию

Подскажите хоть в каком направлении искать ( где-то же оно должно быть
Ответить с цитированием
  #3  
Старый 05.11.2013, 06:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Harima Hario
Подскажите хоть в каком направлении искать ( где-то же оно должно быть

Значит они явно не случайные.
Вообще, я чего-то не вижу где они д.б. Ну и тяжко разбираться, украинским не сильно владею...
Ответить с цитированием
  #4  
Старый 05.11.2013, 11:22
Harima Hario Harima Hario вне форума
Прохожий
 
Регистрация: 28.02.2011
Сообщения: 27
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Значит они явно не случайные.
Вообще, я чего-то не вижу где они д.б. Ну и тяжко разбираться, украинским не сильно владею...
Иначе бы написанная мною программа работала

Тут даже дело вот в чем: если сравнить два исходных кода стартовой страницы в разное время (после обновления) – соответствие 100% то есть ни одного символа так и не изменилось, но значения order.x и order.y ведь где-то берутся… сайт не очень замысловатый, не думаю, что там имеются какие-то дополнительные методы защиты…

Вот мой код, может кто-то там увидит ошибку:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL, httpsend, ssl_openssl,
  OleCtrls, SHDocVw, synacode, synautil, Gauges, ExtCtrls, ComCtrls, Grids;

type
  TForm1 = class(TForm)
    btn1: TButton;
    mmo3: TMemo;
    edt1: TEdit;
    mmo5: TMemo;
    lbl1: TLabel;
    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;
  link1, result, NewURL: string;
  n: integer;
  Res: boolean;

  begin
      httpsend:=THTTPSend.Create;
      httpsend.AddPortNumberToHost:= False;
      httpsend.HTTPMethod('get', 'http://brain.kiev.ua');
      Application.ProcessMessages;
      mmo3.Lines.LoadFromStream(httpsend.Document);
      Application.ProcessMessages;

      stream := TStringStream.Create('');

      stream.WriteString('swords='+edt1.Text+'+&order.x=11&order.y=14');

      Application.ProcessMessages;
      httpsend.Clear;
      httpsend.MimeType := 'application/x-www-form-urlencoded';
      httpsend.Document.LoadFromStream(stream);
      Res := httpsend.HTTPMethod('post', 'http://brain.kiev.ua/index.php?30&backPID=45');
      Application.ProcessMessages;
      result:=IntToStr(httpsend.ResultCode);

      if result = '302' then
      begin
        lbl1.Caption:='Получилось';
        Application.ProcessMessages;
      end;

      if result <> '302' then
      begin
        lbl1.Caption:='Не получилось';
        Application.ProcessMessages;
//        mmo5.Clear;
        Application.ProcessMessages;
      end;


  if Res then
    case httpsend.ResultCode of
      301, 302, 307:
        begin
          n := FoundLocationStrNum(httpsend.Headers);
          if (n >= 0) and (n <= httpsend.Headers.count) then
          begin
            NewURL := StringReplace(httpsend.Headers.Strings[n], 'Location: ', '', []);
            Application.ProcessMessages;
            httpsend.Clear;
            httpsend.HTTPMethod('GET', NewURL);
            Application.ProcessMessages;
            mmo5.Lines.Text := GetHTTPStr(httpsend);
            Application.ProcessMessages;
          end;
        end;
    end;
  end;
end.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter