![]() |
TEmbeddedWB + MultiProxy
Moin, ich stehe mal wieder vor einem Problem :)
Ich arbeite mit der TEmbeddedWB Komponente und möchte über einen Proxy Server surfen. Soweit ist das auch kein Problem.. Jetzt möchte ich parallel zu meiner Applikation mit dem Internet Explorer surfen, jedoch ohne Proxy. Das Problem ist das sich beide Programme die selben Einstellungen teilen und somit musste mein Vorhaben fürs erste scheitern. Hat jemand eine Idee wie ich unabhängig vom IE mit dem TEmbeddedWB eine Proxy Verbindung erstellen kann. Noch schöner wäre es wenn ich mit 2 TEmbeddedWebBrowser unabhägig voneinander surfen könnte. Ich bin mal gespannt :) Cheers |
AW: TEmbeddedWB + MultiProxy
![]() Allerdings gelten die Proxy-Einstellungen global für die Anwendung und nicht für jede IE-Komponente separat. |
AW: TEmbeddedWB + MultiProxy
Naja wie ich die Einstellung setzen kann weiss ich ja bereits. Ich suche nach einer lokalen Proxy Verbindungs -Lösung :) Scheinbar gibt es die aber nicht.
|
AW: TEmbeddedWB + MultiProxy
Hast Du den Artikel genau gelesen? Wahrscheinlich nicht, denn dann hättest Du gesehen, daß die Funktion InternetSetOption genau das macht, was Du möchtest: (Unter anderem) die Proxy-Einstellungen für Dein Programm ändern - unabhängig von IE-Instanzen anderer Anwendungen. :wink:
Das ganze läßt sich mit knapp 30 Programmzeilen umsetzen (plus der Typdefinitionen). Läuft bei mir super... 8-) |
AW: TEmbeddedWB + MultiProxy
Oh, ja erwischt! Ich habe nur den Anfang gelesen ... Würdest du den Source mit uns teilen ?
|
AW: TEmbeddedWB + MultiProxy
Ok - da will ich mal nicht so sein... :wink:
Delphi-Quellcode:
function SetProxy(Server: String): Boolean; //Server z.B. '127.0.0.1:8080' oder ''
type INTERNET_PER_CONN_OPTION = record dwOption: DWORD; Value: record case Integer of 1: (dwValue: DWORD); 2: (pszValue: {$IFDEF DELPHI2009_UP}PWideChar{$ELSE}PAnsiChar{$ENDIF}); 3: (ftValue: TFileTime); end; end; LPINTERNET_PER_CONN_OPTION = ^INTERNET_PER_CONN_OPTION; INTERNET_PER_CONN_OPTION_LIST = record dwSize: DWORD; pszConnection: LPTSTR; dwOptionCount: DWORD; dwOptionError: DWORD; pOptions: LPINTERNET_PER_CONN_OPTION; end; LPINTERNET_PER_CONN_OPTION_LIST = ^INTERNET_PER_CONN_OPTION_LIST; const INTERNET_PER_CONN_FLAGS = 1; INTERNET_PER_CONN_PROXY_SERVER = 2; INTERNET_PER_CONN_PROXY_BYPASS = 3; INTERNET_PER_CONN_AUTOCONFIG_URL = 4; INTERNET_PER_CONN_AUTODISCOVERY_FLAGS = 5; PROXY_TYPE_DIRECT = $00000001; PROXY_TYPE_PROXY = $00000002; PROXY_TYPE_AUTO_PROXY_URL = $00000004; PROXY_TYPE_AUTO_DETECT = $00000008; INTERNET_OPTION_REFRESH = 37; INTERNET_OPTION_PER_CONNECTION_OPTION = 75; INTERNET_OPTION_SETTINGS_CHANGED = 39; var OptionsList: INTERNET_PER_CONN_OPTION_LIST; BufSize: DWORD; HInternet: Pointer; Agent: String; begin Result:=false; BufSize:=SizeOf(OptionsList); OptionsList.dwSize:=BufSize; OptionsList.pszConnection:=nil; //nil -> LAN, sonst Verbindungsname OptionsList.dwOptionCount:=3; //3 Optionen werden gesetzt OptionsList.pOptions:=AllocMem(3*SizeOf(INTERNET_PER_CONN_OPTION)); try if not assigned(OptionsList.pOptions) then Exit; OptionsList.pOptions^.dwOption:=INTERNET_PER_CONN_FLAGS; OptionsList.pOptions^.Value.dwValue:=PROXY_TYPE_DIRECT or PROXY_TYPE_PROXY; inc(OptionsList.pOptions); OptionsList.pOptions^.dwOption:=INTERNET_PER_CONN_PROXY_SERVER; OptionsList.pOptions^.Value.pszValue:=PChar(Server); inc(OptionsList.pOptions); OptionsList.pOptions^.dwOption:=INTERNET_PER_CONN_PROXY_BYPASS; OptionsList.pOptions^.Value.pszValue:='local'; dec(OptionsList.pOptions,2); Agent:=ExtractFileName(Application.ExeName); hInternet:=InternetOpen({$IFDEF DELPHI2009_UP}PWideChar{$ELSE}PAnsiChar{$ENDIF} (Agent),INTERNET_OPEN_TYPE_DIRECT,nil,nil,0); try //Optionen setzen Result:=InternetSetOption(hInternet,INTERNET_OPTION_PER_CONNECTION_OPTION, @OptionsList,BufSize); InternetSetOption(hInternet,INTERNET_OPTION_REFRESH,nil,0); finally InternetCloseHandle(hInternet); end; finally FreeMem(OptionsList.pOptions); //Speicher freigeben end; end; |
AW: TEmbeddedWB + MultiProxy
Wow, klappt hervorragend! Danke schön :thumb:
Jetzt habe ich unabhängige Proxy Einstellungen für meine Applikation. Kann ich das auch auf meine Komponente beschränken? Sagen wir Webbrowser1 soll über einen Proxy die Verbindung aufbauen und Webbrowser2 soll ganz normal die Einstellungen vom IE nehmen bzw. die Verbindung über einen anderen Proxy aufbauen? Edit: Schön wäre es wenn man diese Einstellung nur für einen Thread machen könnte. |
AW: TEmbeddedWB + MultiProxy
Liste der Anhänge anzeigen (Anzahl: 1)
Leider bin ich nach zwei Tagen Recherche und vielen Experimenten zum Schluß gekommen: Das funktioniert so leider nicht. Die Browser-Funktionen werden in den Adressraum der eigenen Anwendung per DLL eingebunden. Somit beziehen sich ungünstigerweise alle Einstellungen auf diese DLL und damit auf die komplette Anwendung und nicht auf eine einzelne TWebBrowser-Instanz oder einen bestimmten Thread.
Aber: Es besteht natürlich die Möglichkeit, den Proxy in die eigene Anwendung zu integrieren - entweder als fertige Proxy-Komponente in Form eines TIdHTTPProxy's oder als HTTP-Server (nimmt man wieder Indy, so bietet sich TIdHTTPServer an oder THTTPServer aus der Internet Component Suite). Die eintreffenden Anfragen aus den einzelnen WebBrowser-Komponenten kann man jetzt nach seinen eigenen Regeln blockieren, filtern und/oder an weitere interne/externe Proxys oder direkt an den Zielserver weiterleiten. Ich habe mal eine kleine Grafik dazu erstellt: Anhang 33402 |
AW: TEmbeddedWB + MultiProxy
Eventuell leicht OT, Frage dennoch @Thom:
Welchen String müsste ich als Server in Deine
Delphi-Quellcode:
eingeben, um NUR lokale Dateien mit dem EmbeddedWB anzeigen zu können?
function SetProxy(Server: String): Boolean; //Server z.B. '127.0.0.1:8080' oder ''
Hintergrund: Möchten einen EmbeddedWB als "Viewer" benutzen, der möglichst NICHT online gehen kann - falls das überhaupt mit den Proxy-Einstellungen (von denen ich Null Ahnung habe) möglich/zu verhindern ist. Bitte - Danke! |
AW: TEmbeddedWB + MultiProxy
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... :wink: Der Beispielcode folgt - momentan bin ich noch am Testen... |
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: |
AW: TEmbeddedWB + MultiProxy
Ich sehe: Ihr wart heute fleißig! :thumb:
Ja, die Indy's... :roll: Um das mal kurz zusammenzufassen: Die Komponente TIdHTTPServer zerlegt - mehr oder weniger gut - die Anfrage in seine Bestandteile. Fehler werden definitiv beim Parsen der Kekse gemacht (das hatte ich schon weiter vorn im Listing erwähnt). Die Komponente TIdHTTP macht aus den Einzelteilen, mit der sie initialisiert wird, wieder eine neue Anfrage. Aber leider werden auch hier Fehler gemacht (siehe Problem mit Content-Encoding und - wahrscheinlich - dem CharSet). Dieses Zerlegen und anschließende Zusammenfügen ist zwar unheimlich flexibel - wenn da nicht so viele Fehlerquellen wären. Normalerweise sollte ein Proxy die Daten unverändert in beide Richtungen durchschaufeln - nicht mehr und nicht weniger. OK: Diese Aufgabe erledigt die Komponente TIdHTTPProxyServer - nur eben ohne merklicher Einflußmöglichkeit durch den Programmierer. Nach den bisherigen Tests bin ich mit keiner der Lösungen richtig glücklich. Bugs in den Indy-Units auszubügeln ist schwierig, da die mit Delphi gelieferten Versionen extrem schlecht und nur mit viel Aufwand neu compilierbar sind (zumindest unter XE). Deshalb habe ich in den letzten zwei Tagen einen neuen Proxy - basierend auf Indy-Komponenten - geschrieben, der einerseits keine Daten verschluckt und andererseits wesentlich flexibler als die mitgelieferte Komponente ist. Erste Tests laufen ganz gut: Google wird korrekt mit den deutschen Umlauten angezeigt und Flash funktioniert. Selbst hier im Forum kann ich gut navigieren. Bei dieser Gelegenheit stellte ich fest, daß etliche Bilder vorgeben, Gif's zu sein, obwohl sie in Wahrheit Jpeg's sind... :wink: Allerdings wird momentan noch kein Streaming unterstützt. Windows 7 konnte ich leider noch nicht testen. Allerdings benötige ich noch eine kleine Weile für Tests und den Einbau weiterer Features. 8-) |
AW: TEmbeddedWB + MultiProxy
Zitat:
Hast du eigentlich mit anderen Komponenten versuch? (Clever Internet Suite, etc.) Das einzige Problem ist das es nicht Frei ist aber die haben ein Trial zum Testen. Bin gerade dabei mein notebook zu updaten und da es ein oder zwei Tage dauern wird, werde erst später das testen. Nur um zu sehen wie es sich verhält. Aber hast du das letzte version von Indy benutzt (download via SVN) oder benutzt du das Indy die mit Delphi mit geliefert wird? Vielleicht sind da schon einige Verbesserungen. Also, falls du Hilfe brauchst mit testen unten Win 7 und Englisch OS, schicke mir ein email, du wirst es haben ;-) Gruss, André (von Sydney) |
AW: TEmbeddedWB + MultiProxy
Liste der Anhänge anzeigen (Anzahl: 5)
Hallo André,
viele Grüße zurück nach Sydney! :hello: Weshalb vergeht die Zeit nur immer so schnell!? :cry: Ich hatte in den letzten 14 Tagen mit den Indy-Quelltexten gekämpft und mich in einem Schnellkurs in die Grundlagen der HTTP-Kommunikation eingearbeitet. 8-) Heute also die ersten Ergebnisse dieser Anstrengungen. Mit einem Proxy kann man (fast) alles machen - aber auch schnell ziemlich viel falsch. Ich möchte deshalb einige grundlegende Überlegungen zum Proxy an einem Beispiel demonstrieren. Wer hat schon einmal versucht, die Google-Seite auf Englisch zu sehen? Das sollte eigentlich kein Problem sein: ![]() Interessanterweise landet man dann sofort auf der deutschen Seite google.de. :gruebel: Ein Service? Das wollte ich doch aber gar nicht!!! :cry: Ok. Erster Versuch mit dem Proxy: Anhang 33571 Den Eintrag Accept-Language auf he eingestellt (1.) - zur Kontrolle die Header angeschaut (2.) - stimmt. Und schon kann die Maus Hebräisch. :-D Anhang 33568 Zweiter Versuch mit Accept-Language auf en (2.) - Kontrolle der Header (3.): stimmt. Kekse sicherheitshalber aus (4.) und ab zu google.com (1.). Als Reaktion erhält man von Google die interessante Antwort, daß die Seite angeblich verschoben wurde (5.). Achso!? :shock: Und als Folge davon kommt die Weiterleitung auf google.de (6.). Damit ist also klar, weshalb man Google nicht auf Englisch zu sehen bekommt. Bleibt die Frage, wie Google erkennt, daß ich aus Deutschland komme. An der HTTP-Anfrage kann es nicht liegen - die Header wurden entsprechend korrigiert und verräterische Cookies vor der Übertragung gelöscht. Ein JavaScript wurde auch nicht geladen. Wertet Google eventuell die IP-Adresse aus!? :roll: Nächster Versuch mit einem weiteren, nachfolgenden Proxy aus dem Internet (1.): Anhang 33569 Und siehe da: Wie durch ein Wunder kommt die erwartete Antwort vom Server (2.) und die gewünschte Seite (3.). Also wertet Google offenbar doch die IP des Computers aus (ich lasse mich natürlich gern eines Besseren belehren)!?. Dazu etwas Stoff für Paranoiker: Wer nicht weiß, ![]() In diesem Zusammenhang eine lustige Sache: Diese Seite, die so für Anonymität im Internet plädiert, wertet die Besucher gleich mal schnell durch Google-Analytics aus (1. und 2.)... :wink: Anhang 33570 Natürlich gibt es Firewalls, Plugins für Browsers und eine Menge anderer Tools, die für ein tolles Gefühl an Sicherheit und Anonymität sorgen - trotzdem ist es sehr interessant, einmal hinter die Kulissen zu schauen, um wieder mal etwas aus der Traumwelt aufzuwachen. :stupid: Dazu bietet sich ein Proxy an, mit dessen Hilfe man die volle Kontrolle über den aus- und eingehenden Datenverkehr einer TWebBrowser-Komponente erhält. Die Indy-interne Komponente TIdHTTPProxyServer bietet eine Ausgangsbasis, die aber für eine vernünftige Handhabung erweitert werden muß. Einen möglichen Ausgangspunkt für eigene Experimente bietet die Komponente THTTPProxyServer auf Basis der Indy's. Sie besitzt vier Ereignishandler:
Delphi-Quellcode:
Die Komponente ist noch im absoluten Anfangsstadium - inklusive etlicher Baustellen und Bugs... :wink:
procedure TForm1.OnLog(Sender: TObject; LogItem: TLogItem);
begin with ListView1.Items.Add do begin Caption:=LogItem.Request.Command; Data:=LogItem; SubItems.Add(IntToStr(LogItem.Response.Code)); SubItems.Add(LogItem.Response.ContentType); SubItems.Add(LogItem.Request.Host); SubItems.Add(LogItem.Request.Path); SubItems.Add(LogItem.Request.Document); SubItems.Add(LogItem.Request.Params); end; end; Viel Spaß bei eigenen Experimenten! :thumb: P.S.: Mir ist bekannt, daß ich auch auf der deutschen Google-Seite Englisch als Oberflächensprache einstellen kann (das geht dann per Cookie). Mir ging es aber um eine Klärung der Frage, wie ich auf google.com gelangen und auch dort bleiben kann, ohne gleich wieder weggeschickt zu werden. |
AW: TEmbeddedWB + MultiProxy
I am not sure if this will work with HTTPS ?
|
AW: TEmbeddedWB + MultiProxy
Zitat:
Delphi-Quellcode:
Gibt es eine aktuellere Version dieser Funktion oder soll ich einfach PAnsiChar/PWideChar berichtigen?
OptionsList.pOptions^.Value.pszValue := PChar(Server);
// [dcc32 Error] MainForm.pas(361): E2010 Incompatible types: 'PAnsiChar' and 'PWideChar' (Agent), INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); // [dcc32 Warning] MainForm.pas(369): W1044 Suspicious typecast of string to PAnsiChar // [dcc32 Error] MainForm.pas(369): E2010 Incompatible types: 'PWideChar' and 'PAnsiChar' |
AW: TEmbeddedWB + MultiProxy
Definier doch einfach die Direktrive
Delphi-Quellcode:
, die wird ja abgefragt.
{$DEFINE DELPHI2009_UP}
|
AW: TEmbeddedWB + MultiProxy
Hallo DeddyH!
Vielen Dank, klappt! Da ich bestimmte Websites hintereinander in TWebBrowser aufrufe, schien es zuerst nicht zu klappen. Aber offenbar gibt es durch den Proxy Server eine Verzögerung von bis zu 5 Sekunden. (Ist das normal?). So habe ich die Intervalle zwischen den Aufrufen vergrößert, und jetzt scheint es zu klappen. Gibt es irgendwo eine Liste von internationalen Proxy Server IPs, die verlässlich auch für längere Zeit funktionieren und eine nicht zu große Verzögerung haben? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 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