Einzelnen Beitrag anzeigen

Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

HTTP-Post mit idHTTP.DoRequest funktioniert nicht

  Alt 15. Nov 2007, 17:33
Hallo zusammen!


Ich schreibe gerade einen Proxy-Server welcher mit einem Parent-Proxy
arbeiten soll. Sinn des ganzen ist es die aufgerufenen Internetseiten
zu kontrollieren bzw. nur eine ganz bestimmte Site zu erlauben.

Nun zum Problem: Das Aufrufen von Webseiten funktioniert gut aber
Anmeldungen die ein HTTP-Post Kommando benutzen klappen einfach nicht.
Dabei wird einfach die Anmeldeseite nochmal geladen...

Weiß Jemand Rat?


Delphi-Quellcode:
procedure TfrmMain.IdHttpServerCommandGet(AThread: TIdPeerThread;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  UrlStr: AnsiString;
  Method: TIdHTTPMethod;
  idHttpClient: TidHttp;
begin
  try
    AResponseInfo.ResponseNo := 501;

    Log('KOMMANDO: '+ARequestInfo.RawHTTPCommand);

    UrlStr := 'http://'+ARequestInfo.Host+ARequestInfo.Document;
    if Length(ARequestInfo.QueryParams) > 0 then UrlStr := UrlStr+'?'+ARequestInfo.QueryParams;

    idHttpClient := TidHttp.Create(nil);
    try
      with idHttpClient do
      begin
        with ProxyParams do
        begin
          BasicAuthentication := True;
          ProxyServer := 'ParentProxy';
          ProxyPort := 8080;
          ProxyUsername := 'MyUsername';
          ProxyPassword := 'MyPassword';
        end;
        HandleRedirects := True;
        RedirectMaximum := 15;

        if ARequestInfo.Command = 'GETthen Method := hmGet
        else if ARequestInfo.Command = 'POSTthen Method := hmPost
        else if ARequestInfo.Command = 'HEADthen Method := hmHead
        else
        begin
          Log('FEHLER: Unbekanntes Kommando');
          Exit;
        end;

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

        try
          DoRequest(Method, UrlStr, ARequestInfo.PostStream, AResponseInfo.ContentStream);
        finally
          with Response do
          begin
            AResponseInfo.ResponseNo := ResponseCode;
            AResponseInfo.ResponseText := ResponseText;
            AResponseInfo.RawHeaders.Assign(RawHeaders);
          end;
        end;
      end;
    finally
      idHttpClient.Free;
    end;
  except
    on E: Exception do Log('FEHLER: '+E.Message);
  end;
end;
("Log" schreibt Einträge in eine Listbox um zu sehen was da vor sich geht...)

Habe in der DP viele ähnliche Einträge gefunden (daraus wurden auch diese Code-Zeilen
zusammengewürfelt) aber nichts was wirklich auf Anhieb funktioniert hätte...
Die größte Enttäuschung für einen Perfektionisten ist die Realität
  Mit Zitat antworten Zitat