Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TEmbeddedWB + MultiProxy (https://www.delphipraxis.net/158409-tembeddedwb-multiproxy.html)

Thom 24. Feb 2011 21:49

AW: TEmbeddedWB + MultiProxy
 
Liste der Anhänge anzeigen (Anzahl: 2)
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... :wink:

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

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... 8-)

Quelltext für eine einfache Demo mit TEmbeddedWB und TIdHTTPServer:

-187- 27. Feb 2011 18:33

AW: TEmbeddedWB + MultiProxy
 
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 :P

Danke!

AndreFM 27. Feb 2011 22:01

AW: TEmbeddedWB + MultiProxy
 
Zitat:

Zitat von -187- (Beitrag 1084715)
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é

-187- 28. Feb 2011 05:30

AW: TEmbeddedWB + MultiProxy
 
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 ?)

AndreFM 28. Feb 2011 08:43

AW: TEmbeddedWB + MultiProxy
 
Zitat:

Zitat von -187- (Beitrag 1084771)
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 ;-)

AndreFM 28. Feb 2011 09:15

AW: TEmbeddedWB + MultiProxy
 
Zitat:

Zitat von AndreFM (Beitrag 1084791)
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 :-(

-187- 28. Feb 2011 10:44

AW: TEmbeddedWB + MultiProxy
 
Ahh dann ist das ein weiterer Wert der nicht mit dieser Zeile übertragen wird:

Code:
HTTP.Request.Assign(ARequestInfo);
Gut gemacht! Dankeschön.

Edit: Hm ich habe keine Probleme mit den Umlauten, welche Seite hast du getestet?

AndreFM 28. Feb 2011 12:35

AW: TEmbeddedWB + MultiProxy
 
Zitat:

Zitat von -187- (Beitrag 1084823)
Edit: Hm ich habe keine Probleme mit den Umlauten, welche Seite hast du getestet?

Ich habe es mit www.google.de getestet, aber mein Windows und IE8 sind in Englisch, vielleicht hat es damit etwas zu tun, aber wenn ich in IE8 browse schaut alles normal an.

-187- 28. Feb 2011 14:48

AW: TEmbeddedWB + MultiProxy
 
Ja hm es wird damit was zu tun haben. Dann ist dein OS wahrscheinlich auch englisch ?

Ich habe noch ein anderes Problem gefunden. Und zwar laden Flashseiten nicht zu Ende. Mal schauen ob sich das noch beheben lässt.

-187- 28. Feb 2011 18:47

AW: TEmbeddedWB + MultiProxy
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm auf dem Windows XP Rechner funktioniert das Tool einwandfrei. (Soviel zu dem Flash Problem)

Nur frag warum es schon wieder bei Windows 7 klappt.

Edit: Hmm seltsam vorhin hat es auf dem XP Rechner geklappt, jetzt klappt es jedoch hier auch nicht mehr.
Immer wenn der Browser ein Flashdokument downloaden will kommt die Fehlermeldung "Downloadfehler aufgetreten. Bitte versuchen Sie es erneut".

Im Anhang befindet sich noch ein IMG der Fehlermeldung:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz