AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TEmbeddedWB + MultiProxy

Ein Thema von -187- · begonnen am 16. Feb 2011 · letzter Beitrag vom 1. Aug 2015
Antwort Antwort
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#1

AW: TEmbeddedWB + MultiProxy

  Alt 20. Feb 2011, 14:46
Die Proxy-Einstellungen beziehen sich darauf, wohin der IE seine Anfragen sendet. Läuft Dein Programm mit dem Proxy auf dem lokalen PC, so funktionieren die IP-Adressen '127.1.0.0' und die aktuelle LAN-Adresse (z.B. '192.168.1.10'). '0.0.0.0' und 'localhost' gehen nicht - das könnte aber durchaus auch an der von mir verwendeten TIdHTTPServer-Komponente liegen, die diese Adressen möglicherweise nicht korrekt auflöst.

Du müßtest jetzt in Dein Programm eine Server-Komponente einbauen. Ich verwende den schon erwähnten HTTP-Server von Indy. Der Proxy-Server TIdHTTPProxy tut zwar auch seinen Dienst - allerdings sind da die Eingriffsmöglichkeiten in den Ereignismethoden sehr eingeschränkt und man müßte einige Dinge in der Komponente überschreiben. Wesentlich einfacher geht es mit TIdHTTPServer, dessen Eigenschaft Bindings auf die gewünschte Adresse+Port zu setzen ist. Als Port würde natürlich auch 80 gehen, solange kein lokaler Webserver vor sich hinwerkelt.

In der Ereignisroutine von OnCommandGet wäre jetzt die gewünschte Adresse zu testen: Liegt sie in einem unerwünschten IP-Bereich, wird eine Fehlermeldung zurückgegeben, ansonsten wird die Anfrage weitergereicht und das Ergebnis zurückgeliefert. Dabei kann nach Belieben der User-Agent manipuliert werden (Google mag z.B. keine Indy-Kennung); es geht auch nicht jeden Web-Server an, mit welchem Browser man unterwegs ist oder welche NET-Versionen installiert sind, die Kekse können gezielt geändert oder ganz unterdrückt werden, die akzeptierte Sprache geändert, Bilder on-the-fly verändert sowie Werbebanner und Pixelbildchen ausgeblended werden und und und...

Der Beispielcode folgt - momentan bin ich noch am Testen...
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#2

AW: TEmbeddedWB + MultiProxy

  Alt 24. Feb 2011, 21:49
Auch wenn's etwas länger gedauert hat: Hier kommt der versprochene Beispielcode, um aus TIdHTTPServer einen voll steuerbaren Proxy zu basteln:
Delphi-Quellcode:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  URL: String;
  HTTP: TIdHTTP;
begin
  HTTP:=TIdHTTP.Create;
  try
    HTTP.Request.Assign(ARequestInfo);
    //Dinge, die bei Assign nicht mit übertragen werden:
    HTTP.Request.Authentication:=ARequestInfo.Authentication;
    HTTP.Request.BasicAuthentication:=ARequestInfo.BasicAuthentication;
    HTTP.Request.From:=ARequestInfo.From;
    HTTP.Request.Host:=ARequestInfo.Host;
    HTTP.Request.Range:=ARequestInfo.Range;
    //Kekse übergeben:
    //Die Übertragung erfolgt mit einen Trick, da der "offizielle" Weg über den Cookie-Manager
    //fehlerhaft ist (IdCookie.ExtractNextCookie() parst Client-Cookies falsch!!!).
    HTTP.Request.CustomHeaders.Add('Cookie: '+ARequestInfo.RawHeaders.Values['Cookie']);
    //Stream für Daten erstellen:
    AResponseInfo.ContentStream:=TMemoryStream.Create;
    //Anfrage zusammenstellen:
    {$IFDEF 10_5_7}
    URL:=ARequestInfo.URI;
    {$ELSE}
    URL:=ARequestInfo.RawHTTPCommand;
    Fetch(URL,' '); //Kommando entfernen (z.B. 'GET'
    URL:=Fetch(URL,' '); //komplette Anfrage ermitteln und HTTP-Typ entfernen (z.B. 'HTTP/1.0')
    URL:=Fetch(URL,'?'); //Anfrage-Parameter entfernen
    {$ENDIF}
    if ARequestInfo.QueryParams<>''
      then URL:=URL+'?'+ARequestInfo.QueryParams;
    //Anfrage an Server:
    try
      HTTP.Get(URL,AResponseInfo.ContentStream,[301,302]);
    except
    end;
    //Antwort übergeben:
    AResponseInfo.RawHeaders.Assign(HTTP.Response.RawHeaders);
    //Reaktion auf bestimmte Antworten:
    case HTTP.Response.ResponseCode of
      301, 302: AResponseInfo.Redirect(HTTP.Response.RawHeaders.Values['Location']);
    end;
  finally
    HTTP.Free;
  end;
end;
Dabei handelt es sich nur um einen prinzipiellen Entwurf, der viele Speziallfälle noch nicht berücksichtigt! Desweiteren beherrschen weder das Beispiel noch die Indy-Komponenten das Streaming von Daten. Diese werden in der aktuellen Indy Version 10 in einem Stück übertragen. Das Anschauen eines YouTube-Videos endet also mit großer Wahrscheinlichkeit im Task-Manager...

Getestet habe ich den Proxy in einem kleinen Programm, das den Datenverkehr zwischen Client (TWebBrowser) und Server protokolliert:
Delphipraxis.jpg

In der oben beschriebenen Methode kann jetzt nach Lust und Laune an den einzelnen Werten herumgeschraubt werden.
Zum Beispiel wäre die Zwischenschaltung eines weiteren Proxys möglich:
Delphi-Quellcode:
    //nächsten Proxy einstellen:
    HTTP.UseProxy:=true;
    HTTP.ProxyParams.ProxyServer:=naechster_Proxy;
    HTTP.ProxyParams.ProxyPort:=80;
    HTTP.ProxyParams.ProxyUsername:=Username;
    HTTP.ProxyParams.ProxyPassword:=Password;
Möchte ich Google Maps auf hebräisch, muß ich nur die Sprache ändern:
Delphi-Quellcode:
    HTTP.Request.AcceptLanguage:='he';
    //...
Soll eine Anfrage blockiert werden, reicht folgender Code:
Delphi-Quellcode:
    if SameStr(ARequestInfo.URI,'unbeliebt') then
    begin
      AResponseInfo.ResponseNo:=204; //'HTTP/1.1 204 No Content'
      Exit;
    end;
Ist man der Meinung, daß es niemanden etwas angeht, mit welchem Browser man unterwegs ist, kann das so verhindert werden:
Delphi-Quellcode:
    HTTP.Request.UserAgent:='Mozilla/3.0 (compatible)';
    //...
Baut man das Ganze noch etwas aus, ließe sich mit einer Black-List gezielt Werbung unterdrücken. Und da gibt es sicherlich noch etliche weitere Dinge, die man mit einem solchen Proxy anstellen könnte...

Quelltext für eine einfache Demo mit TEmbeddedWB und TIdHTTPServer:
Angehängte Dateien
Dateityp: zip ProxyTest.zip (86,6 KB, 28x aufgerufen)
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (25. Feb 2011 um 20:38 Uhr) Grund: Demo
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#3

AW: TEmbeddedWB + MultiProxy

  Alt 27. Feb 2011, 18:33
Hey, kann man jemand das Beispiel auf Windows 7 testen ? Der Author verwendet Windows XP und bei ihm funktioniert es. Ich verwende Windows 7 und bei mir endet ein Aufruf von zum Beispiel "www.google.de" mit einem Dateidownload.

Sehr seltsam, hat es was mit den Sicherheitseinstellungen zu tun ? Ich hab keine Ahnung deshalb frag ich erstmal hier Wenn ihr es schon gestestet habt und der Aufruf von z.B google.de oder delphipraxis.de nicht im Dateidownload endet dann postet mal bitte euer System

Danke!
  Mit Zitat antworten Zitat
AndreFM

Registriert seit: 26. Nov 2009
Ort: Sydney, Australia
15 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: TEmbeddedWB + MultiProxy

  Alt 27. Feb 2011, 22:01
Hey, kann man jemand das Beispiel auf Windows 7 testen ? Der Author verwendet Windows XP und bei ihm funktioniert es. Ich verwende Windows 7 und bei mir endet ein Aufruf von zum Beispiel "www.google.de" mit einem Dateidownload.
I'm testing with Delphi XE and Windows 7 and it does not work 100%.
When I remove the proxy the browser shows the site normally, but using proxy it shows at the browser some strange code, I think that is the reason why your browser try to download.

‹ÿ;{›È®ÿ÷Srk›‚GcBúKÓtÛ=í¶»MÏîÞlN~ Çuüݯ4ÀØivo0ÌCÒH¤oy©[Î3ª„å$>9OJ¼“ã - T—Ù.½›F÷¶úÇî·Óݳt’‘2rbª*nš”4)mõùýJÝ0BtØE î%}(ûˆÊRÜä-íoïvD•1=ù)Mƒ˜÷ù×qáæQVžÌ¢ÄKgFÀíÅíù‡±úÉï.¼dúþç ßÿ¸ýõ`?>¿ýUÕoÏÿøÍæápÿH7_™‡úððphêÃWC}x40GøîA ß³¯Æ ú7{Óèi¬ô!‹þ˜¥>‰Çþ4qË(MzÚb©g$ _KRÛ@Óûc•&ª^FÚì˜Órš'½„Δ·ÐY3Z^@Ÿž¶Ôã4¨»ºº§¿p´ Å=Ébcÿ@¡S›3PljÄ®îã+²ˆ‘&4ÏÓÜîa1N‰
...

André
André Felix Miertschink
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#5

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 05:30
Hm ja genau das ist das Problem. Ich teste die Version gleich mal auf einem Windows XP Rechner. Vielleicht hat es wirklich was mit den Sicherheitseinstellungen zu tun.

Edit: Ok folgendes habe ich rausgefunden:

Das Tool funktioniert unter Windows 2003 / IE 6.
Das Tool funktioniert nicht unter Windows XP / IE 8.


Da der Author auch WindowsXP benutzt geh ich mal davon aus das es nur etwas mit dem IE zutun hat. Bleibt nurnoch festzustellen welche Einstellung diesen Effekt auslöst. (Cookie Problem ?)

Geändert von -187- (28. Feb 2011 um 05:47 Uhr)
  Mit Zitat antworten Zitat
AndreFM

Registriert seit: 26. Nov 2009
Ort: Sydney, Australia
15 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 08:43
Hm ja genau das ist das Problem. Ich teste die Version gleich mal auf einem Windows XP Rechner. Vielleicht hat es wirklich was mit den Sicherheitseinstellungen zu tun.
Eigentlich hat es nicht mit Sicherheitseinstellungen zu tun. Ich bin ja kein expert, aber habe ein ganz einfaches log eingebaut:
Code:
   Memo1.Lines.Add(AResponseInfo.RawHeaders.Text);
Und dann habe ich folgendes gekriegt:
Code:
Date: Mon, 28 Feb 2011 08:38:12 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=510c8a94734051c9:FF=0:TM=1298882292:LM=1298882292:S=PKunBC3R69ygTJku; expires=Wed, 27-Feb-2013 08:38:12 GMT; path=/; domain=.google.de
Set-Cookie: NID=44=ggNfbzG8jwy1V6fxMKY7moKNZgm4nK5LpBLD3zSMY_Yleee1QAGuEQw3jvmoV3ghhukY1HF-tjHqdyHdipPJKbpX_wTjmNL3Qp-9YwpCnUbC3UgMBjyOnyox8hGavUb9; expires=Tue, 30-Aug-2011 08:38:12 GMT; path=/; domain=.google.de; HttpOnly
Content-Encoding: gzip
Server: gws
Content-Length: 6178
X-XSS-Protection: 1; mode=block
...
Connection: close
Falls du ja richtig nachschaust wirst mal sehen: Content-Encoding: gzip
Muss ich jetzt noch weiter kommen und es entpacken, aber da brauche ich noch einige Minuten
André Felix Miertschink
  Mit Zitat antworten Zitat
AndreFM

Registriert seit: 26. Nov 2009
Ort: Sydney, Australia
15 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 09:15
Falls du ja richtig nachschaust wirst mal sehen: Content-Encoding: gzip
Muss ich jetzt noch weiter kommen und es entpacken, aber da brauche ich noch einige Minuten
Was ganz einfaches, addiere mal die Linie:
Code:
HTTP.Request.AcceptEncoding := 'deflate, identity';
Jetzt habe ich nur ein kleines Problem das z.B. Umlaute nicht richtig angezeigt wird. Der Browser zeigt nicht das Wort "Glück", sonst "Glück"
Habe versucht mit
Code:
HTTP.Request.AcceptCharSet := 'ISO-8859-1,utf-8;q=0.7,*;q=0.7';
Aber geht irgendwie nicht. Ich denke das jetzt etwas mit EmbeddedWB sein soll... noch ein Paar Minuten
André Felix Miertschink

Geändert von AndreFM (28. Feb 2011 um 09:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz