AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Webproxy

Ein Thema von endeffects · begonnen am 25. Jul 2004 · letzter Beitrag vom 25. Jul 2004
Antwort Antwort
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#1

Webproxy

  Alt 25. Jul 2004, 10:04
hallo,

ich möchte mir einen web proxy server mit indy basteln und hab mich dazu
ein wenig im netz umgesehen, gefunden hab ich dazu eine lösung
mit der indy mappedport und eine mit der httpserver komponente

schön wäre es wenn der webproxy die requests in folgender form annimmt
http://proxysserver/www.test.de/index2.html

vom (meinem) reinen verständnis her halte ich eine lösung mit hilfe von
idmappedport für die bessere variante, da ich ansonsten mit hilfe von
idhttp jeden gestellten request an den webserver modifizieren
und dann weiterleiten müßte, welche variante würdet ihr bevorzugen?

request > webserver > idhttp > webseite
request > webserver > idmappedport > webseite

anbei noch ein codeschnippsel für die variante mit hilfe von idhttp,
hier steckt allerdings noch ein fehler drin, die variante für
mappedport gibts in den indy demos

für anregungen und ideen wäre ich sehr dankbar

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdCustomHTTPServer,
  IdHTTPServer, IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    IdHTTPServer1: TIdHTTPServer;
    IdHTTP1: TIdHTTP;
    procedure IdHTTP1ServerCreatePostStream(ASender: TIdPeerThread);
    procedure IdHTTPServer1CommandGet(AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
  // event handler for the OnCreatePostStream event...
procedure TForm1.IdHTTP1ServerCreatePostStream(ASender: TIdPeerThread);
var VPostStream: TStream;
begin
        // creating our own stream so that TIdHTTPServer does not automatically
        // free the PostStream before the OnCommandGet event is triggered
        VPostStream := TMemoryStream.Create;
    end;

    // event handler for the On CommandGet event...
procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
        LHTTP: TIdHTTP;
        LURL: String;
        LMethod: TIdHTTPMethod;
        LSource, LDest: TStream;
begin
        LSource := nil;
        LDest := nil;

        if ARequestInfo.Command = 'GETthen begin
            LMethod := hmGet;
        end else if ARequestInfo.Command = 'POSTthen begin
            LMethod := hmPost;
        end else if ARequestInfo.Command = 'HEADthen begin
            LMethod := hmHead;
        end else begin
            AResponseInfo.ResponseNo := 501; // not implemented
            Exit;
        end;

        if LMethod <> hmHead then begin
            AResponseInfo.ContentStream := TMemoryStream.Create;
            if LMethod = hmPost then LSource := ARequestInfo.PostStream;
            LDest := AResponseInfo.ContentStream;
        end;

        LURL := 'http://' + ARequestInfo.Document;
        if Length(ARequest.QueryParams) > 0 then begin
            LURL := LURL + '?' + ARequest.QueryParams;
        end;

        LHTTP := TIdHTTP.Create(nil);
        try
            try
                LHTTP.DoRequest(LMethod, LURL, LSource, LDest);
            finally
                AResponseInfo.ResponseNo := LHTTP.Response.ResponseCode;
                AResponseInfo.ResponseText := LHTTP.Response.ResponseText;
                AResponseInfo.RawHeaders.Assign(LHTTP.Response.RawHeaders);
                // copy over anything else that is needed...
                LHTTP.Free;
            end;
        except end;
    end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#2

Re: Webproxy

  Alt 25. Jul 2004, 10:55
Zitat von endeffects:
vom (meinem) reinen verständnis her halte ich eine lösung mit hilfe von
idmappedport für die bessere variante, da ich ansonsten mit hilfe von
idhttp jeden gestellten request an den webserver modifizieren
Hallo,

es ist doch grad der Witz daran das der Proxy jeden Request selbst nochmal behandelt. Überlicherweise setzen die noch ein HTTP-Header rein und dann währe da noch das Caching von Anfragen, evtl. Integration in eine Cache-Hierarchie und Proxy spez. Fehlermeldungen...

Laut RFC 2616 muß dein Proxy Server sowohl HTTP Client als auch Server funktionalität bieten.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#3

Re: Webproxy

  Alt 25. Jul 2004, 11:04
hallo,

wenn ich die onlinehilfe richtig verstanden habe dann
kann man mit hilfe von TIdMappedPortTCP.Intercept
die Daten ebenfalls manipulieren
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#4

Re: Webproxy

  Alt 25. Jul 2004, 12:48
hmm wenn ich mit hilfe von idmappedport einen http request
stelle dann wird leider der host parameter auf die ip
des proxys gesetzt, weiß jmd wie man hier den domainhost
übergeben kann? ansonsten ist es nämlich nicht möglich
auf webseiten die z.b. auf einer virtuellen domain liegen
zu zugreifen

Zitat:

GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, application/x-gsarcade-launch, */*
Accept-Language: de
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: 127.0.0.1:81
Connection: Keep-Alive
Cookie: IW_SCE_HIDDEN_COMMAND=none
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:54 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