![]()  | 
	
 
  | 
| 
	 | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Учусь делать парсер на примере сайта 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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Подскажите хоть в каком направлении искать ( где-то же оно должно быть 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Значит они явно не случайные. Вообще, я чего-то не вижу где они д.б. Ну и тяжко разбираться, украинским не сильно владею...  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 ![]() Тут даже дело вот в чем: если сравнить два исходных кода стартовой страницы в разное время (после обновления) – соответствие 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. |