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
Seite 2 von 3     12 3      
Thom

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

AW: TEmbeddedWB + MultiProxy

  Alt 24. Feb 2011, 22: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 21:38 Uhr) Grund: Demo
  Mit Zitat antworten Zitat
-187-

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

AW: TEmbeddedWB + MultiProxy

  Alt 27. Feb 2011, 19: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
 
#13

AW: TEmbeddedWB + MultiProxy

  Alt 27. Feb 2011, 23: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
 
#14

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 06: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 06:47 Uhr)
  Mit Zitat antworten Zitat
AndreFM

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

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 09: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
 
#16

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 10: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 10:17 Uhr)
  Mit Zitat antworten Zitat
-187-

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

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 11:44
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?
  Mit Zitat antworten Zitat
AndreFM

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

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 13:35
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.
André Felix Miertschink
  Mit Zitat antworten Zitat
-187-

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

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 15:48
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.
  Mit Zitat antworten Zitat
-187-

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

AW: TEmbeddedWB + MultiProxy

  Alt 28. Feb 2011, 19:47
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:
Angehängte Grafiken
Dateityp: jpg flash.jpg (5,4 KB, 10x aufgerufen)

Geändert von -187- (28. Feb 2011 um 21:22 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 12:12 Uhr.
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