Einzelnen Beitrag anzeigen

Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#1

idHTTPServer und Client als eine art Proxy

  Alt 10. Jan 2008, 09:45
Hallo zusammen!

Ich habe ein Programm das als HTTP-Server fungiert geschrieben.
Das läuft zuhause auf einem kleinen Server. Ich greife mit GlobeDNS darauf zu.

Im Programm enthalten ist ein Datei-Browser und einige andere fest integrierte HTML-Forms.
Das alles läuft über den Indy HTTP-Server auf Port 80.
Das funktioniert auch alles super.

Ausserdem läuft auf dem Rechner µTorrent mit dem neuen Java Web-Interface auf Port 8080.

Nun will ich, dass mein HTTP-Server bei der Anfrage 192.168.X.X:80/gui/ das Web-Interface
von µTorrent durchreicht (zu erreichen unter 192.168.X.X:8080/gui/ ).
Hintergrund ist der, dass ich auf Arbeit hinter einem Proxy sitze der nur Port 80 durch lässt.

Ich ersetze also im eingehenden Request vom HTTP-Server einfach 192.186.X.X/gui/ durch 192.168.X.X:8080/gui/ und hole mir diese URL dann mit dem Indy HTTP-Client per Client.Get().

Auch das funktioniert im Grunde schon, aber die Seite,was ich dann angezeigt bekomme ist komplett durcheinander.

Im Anhang sind zwei Bilder. Das eine, wie es aussehen müsste, und das zweite so wie es mein Server raus gibt.

Hier mal noch die Get-Routine der idHTTPServers:
Delphi-Quellcode:
procedure TForm2.ServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  URL : String;
  s : String;
  Temp : String;
begin
  If Pos('/gui/',LowerCase(ARequestInfo.Document)) > 0 then begin
  //Request für das Webinterface auf 8080

    Temp := StringReplace(ARequestInfo.Document,'/gui/',':8080/gui/',[rfIgnoreCase]);
    URL := 'http://127.0.0.1'+ Temp;
    // xyz.globedns.info/gui/ -> 127.0.0.1:8080/gui/

    try
      while HTTP.Tag=1 do Application.ProcessMessages;
      HTTP.Tag:=1;
      s := HTTP.Get(URL);
      AResponseInfo.RawHeaders.Text := HTTP.Response.RawHeaders.Text;
      AResponseInfo.WriteHeader;

      AResponseInfo.ContentText := s;
      AResponseInfo.ContentType := HTTP.Response.ContentType;
      HTTP.Tag:=0;
      AResponseInfo.WriteContent;
    except
    end;
  end
  else begin
    AResponseInfo.ContentText := 'normaler Request für Port 80 (HTTP server)';
    AResponseInfo.WriteContent;
    //Hier sind noch die Verzweigungen für die ganzen anderen Dokumente
  end;
end;
Hat jemand eine Idee, warum nur dieser komische Müll bei mir ankommt?
Fehlt vieleicht CSS?
Miniaturansicht angehängter Grafiken
web_ui_richtig_144.jpg   web_ui_falsch_163.jpg  
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat