![]() |
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:
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:
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; 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:
Möchte ich Google Maps auf hebräisch, muß ich nur die Sprache ändern:
//nächsten Proxy einstellen:
HTTP.UseProxy:=true; HTTP.ProxyParams.ProxyServer:=naechster_Proxy; HTTP.ProxyParams.ProxyPort:=80; HTTP.ProxyParams.ProxyUsername:=Username; HTTP.ProxyParams.ProxyPassword:=Password;
Delphi-Quellcode:
Soll eine Anfrage blockiert werden, reicht folgender Code:
HTTP.Request.AcceptLanguage:='he';
//...
Delphi-Quellcode:
Ist man der Meinung, daß es niemanden etwas angeht, mit welchem Browser man unterwegs ist, kann das so verhindert werden:
if SameStr(ARequestInfo.URI,'unbeliebt') then
begin AResponseInfo.ResponseNo:=204; //'HTTP/1.1 204 No Content' Exit; end;
Delphi-Quellcode:
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-)
HTTP.Request.UserAgent:='Mozilla/3.0 (compatible)';
//... Quelltext für eine einfache Demo mit TEmbeddedWB und TIdHTTPServer: |
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! |
AW: TEmbeddedWB + MultiProxy
Zitat:
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é |
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 ?) |
AW: TEmbeddedWB + MultiProxy
Zitat:
Code:
Und dann habe ich folgendes gekriegt:
Memo1.Lines.Add(AResponseInfo.RawHeaders.Text);
Code:
Falls du ja richtig nachschaust wirst mal sehen: Content-Encoding: gzip
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 Muss ich jetzt noch weiter kommen und es entpacken, aber da brauche ich noch einige Minuten ;-) |
AW: TEmbeddedWB + MultiProxy
Zitat:
Code:
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"
HTTP.Request.AcceptEncoding := 'deflate, identity';
Habe versucht mit
Code:
Aber geht irgendwie nicht. Ich denke das jetzt etwas mit EmbeddedWB sein soll... noch ein Paar Minuten :-(
HTTP.Request.AcceptCharSet := 'ISO-8859-1,utf-8;q=0.7,*;q=0.7';
|
AW: TEmbeddedWB + MultiProxy
Ahh dann ist das ein weiterer Wert der nicht mit dieser Zeile übertragen wird:
Code:
Gut gemacht! Dankeschön.
HTTP.Request.Assign(ARequestInfo);
Edit: Hm ich habe keine Probleme mit den Umlauten, welche Seite hast du getestet? |
AW: TEmbeddedWB + MultiProxy
Zitat:
![]() |
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. |
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 17:08 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