![]() |
Webproxy
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 ![]() 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 = 'GET' then begin LMethod := hmGet; end else if ARequestInfo.Command = 'POST' then begin LMethod := hmPost; end else if ARequestInfo.Command = 'HEAD' then 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. |
Re: Webproxy
Zitat:
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 ![]() |
Re: Webproxy
hallo,
wenn ich die onlinehilfe richtig verstanden habe dann kann man mit hilfe von TIdMappedPortTCP.Intercept die Daten ebenfalls manipulieren |
Re: Webproxy
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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