Entwickler-Ecke

Internet / Netzwerk - idHTTP liefert anderen Code als Browser


F34r0fTh3D4rk - Mo 28.08.06 18:55
Titel: idHTTP liefert anderen Code als Browser


Martok - Mo 28.08.06 19:04

Nach einigem weiterem rumprobieren gibt es neue Ergebnisse:


Hier mal mein ICS-Testcode:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  src_code: string;
  buf: TStringStream;
begin
//...url bauen....
  buf:= TStringStream.Create('');
  try
    HttpCli1.URL:= url;
    HttpCli1.RcvdStream:= buf;
    HttpCli1.Get;
    src_code:= buf.DataString;
  finally
    buf.Free;
  end;

Der Indy-Code ist ähnlich, da steht dann IdHttp1.Get(url,buf);

Kann jemand was damit anfangen?

//Martok


matze - Di 29.08.06 10:10

Probier mal den User agent so anzupassen, dass Google denk, da kommt ein Firefox daher.


Martok - Di 29.08.06 11:47

Danke für die Antwrt!
Sehr interessant. Das geht!

Normal steht 'Mozilla/3.0 (compatible; Indy)' drin. Ich statt dessen 'Mozilla/5.0' reingeschrieben. Wenn irgendwas von Compatible drin steht, kommt solcher Zeichensalat.

Aber warum stimme dann immer der Anfang des Strings, der Fehlerhafte Code kam ja immer erst nach ein paar tausend Zeichen?

//Martok


matze - Di 29.08.06 12:01

Google versucht die Ausgabe seiner Seite an den jeweiligen Browser anzupassen. Wenn du z.B. mit einem Mobiledevice auf Google gehst, wirst du eine Seite bekommen, die auf dein Handy oder PDA zugeschnitten ist.
Evtl spinnt da die Routine bei Goolge ein bisschen oder das ist auf einen bestimmten Browser zugeschnitten, dass du solchen Zeichensalat bekommst.


F34r0fTh3D4rk - Di 29.08.06 17:39

das ding ist ja, ich versuche an die addresse eines der bilder zu kommen, dazu musste ich meine suche erstmal von den " auf das hier umstellen:


Quelltext
1:
<img style=''border:1px solid;'' src=                    

am ende aber wieder nach einen " suchen, dann bekomme ich aber zu wenig, es scheint, als ob alles mit javascript "einkodiert" ist, die http://... .jpg s sind woanders

hier mal mein bisheriger delphi code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
unit UMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, strutils, IdCookieManager;

const
  address_begin = 'http://images.google.de/images?filter=0&q=';
  address_size = '&imgsz=';
  address_start = '&start=';

  img_icon = 'icon';
  img_small = 'small';
  img_medium = 'medium';
  img_large = 'large';

  codesearch = '<img style=''border:1px solid;'' src=';

type
  TMainForm = class(TForm)
    BTN_Search: TButton;
    E_Search: TEdit;
    IMG_Display: TImage;
    IdHTTP1: TIdHTTP;
    CB_Size: TComboBox;
    Memo1: TMemo;
    procedure BTN_SearchClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

function Extract(S, Start,EndText: string; num: integer; IgnoreCase:boolean): string;
var
  i, f, j,
  count:integer;
begin
  if num < 1 then
    exit;
  count := 0;
  f:= 0;
  if IgnoreCase then begin
    s:= LowerCase(S);
    Start:= LowerCase(Start);
    EndText:= LowerCase(EndText);
  end;
  for i:= 1 to Num do begin
    f:= PosEx(Start,S,f);
  end;
  j:= f+length(Start);
  if f>0 then
    Result:= copy(S,j,posex(EndText,S,j)-j);
end;

procedure TMainForm.BTN_SearchClick(Sender: TObject);
var
  img_size,
  src_code,
  str_address: string;
  i: integer;
begin
  case CB_Size.ItemIndex of
    0: img_size := img_icon;
    1: img_size := img_small;
    2: img_size := img_medium;
    3: img_size := img_large;
  end;
  src_code := idHTTP1.Get(address_begin + E_Search.Text + address_size + img_size + address_start + '0');  //0 später durch zufallsseite ersetzen 
////////////////////////////////////
  memo1.text := src_code;
////////////////////////////////////
  i := 1;
  repeat
    str_address := Extract(src_code, codesearch, '"', i, true);
    inc(i);
  until
    (str_address <> ''or (i = 10);
////////////////////////////////////
  showmessage(str_address);
////////////////////////////////////
end;

Initialization
  randomize;

end.

die idee ist es, zu einem begriff ein zufälliges online bild anzeigen zu lassen.

momentan kommt nur das raus:

Delphi-Quelltext
1:
/images?q=tbn:                    

aber das ist länger und daraus will ich ja auch noch die tatsächliche bildaddresse extrahieren.

mfg