AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TidHTTP.Post() - Parameter werden nicht getrennt
Thema durchsuchen
Ansicht
Themen-Optionen

TidHTTP.Post() - Parameter werden nicht getrennt

Offene Frage von "TDKBacke"
Ein Thema von TDKBacke · begonnen am 9. Jan 2006 · letzter Beitrag vom 11. Jan 2006
 
TDKBacke

Registriert seit: 9. Jan 2006
3 Beiträge
 
#1

TidHTTP.Post() - Parameter werden nicht getrennt

  Alt 9. Jan 2006, 19:33
Hallo Forum,

wie ich bei einer Suche hier im Forum feststellen musste, existieren schon einige Beiträge zum Thema TidHTTP.Post() und nicht (richtig) ankommende Parameter, allerdings ist mein Fall etwas anders gelagert.

Zuerst einmal der Code (der Vollständigkeit wegen etwas länglich, der wichtige Teil ist durch '!!! ... !!!'-Kommentare kenntlich gemacht):
Delphi-Quellcode:
procedure Proxy.HTTPServerCommandGet(AThread: TIdPeerThread;
  RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);
var
    i : integer;
    HTTPClient : TIdHTTP;
    tmpStringList : TStringList;

begin
    // HTTPClient initialisieren
    HTTPClient:=TIdHTTP.Create(nil);
    HTTPClient.HandleRedirects:=true;
    HTTPClient.ProtocolVersion:=pv1_0;

    // HTTP-Header manipulieren
    // ...

    // POST-Anfragen weitergeben
    if (RequestInfo.Command='POST') then
    begin
        ResponseInfo.ContentStream:=TMemoryStream.Create;
        tmpStringList:=TStringList.Create;

        // !!! Hier beginnt das Problem !!!

        for i:=0 to RequestInfo.Params.Count-1 do
        begin
            // Variante 1
            tmpStringList.Add(RequestInfo.Params.Strings[i]);

            // Variante 2
            // if (i<RequestInfo.Params.Count-1) then tmpStringList.Add(URLEncode(RequestInfo.Params.Strings[i] + '&'))
            // else tmpStringList.Add(URLEncode(RequestInfo.Params.Strings[i]));
        end;

        HTTPClient.Post('http://' + RequestInfo.Host + RequestInfo.Document, tmpStringList, ResponseInfo.ContentStream);

        // !!! Hier endet das Problem !!!

    end;

    ResponseInfo.ContentType:=HTTPClient.Response.ContentType;
    ResponseInfo.ContentLength:=length(ResponseInfo.ContentText);
    ResponseInfo.ResponseNo:=HTTPClient.ResponseCode;
    ResponseInfo.ServerSoftware:=HTTPClient.Response.Server;

    ResponseInfo.WriteHeader;
    ResponseInfo.WriteContent;
end;
Wie man vielleicht erkennen kann, soll das einen HTTP-Proxy darstellen. Mit dem HTTP-Server aus Indy wird ein Request angenommen, an TidHTTP weitergeleitet und dessen Ergebnis wiederum an den Aufrufer zurückgegeben. (Für GET-Anfragen - hier rausgestrichen - funktioniert das übrigens problemlos.)
Bei POST-Anfragen gibt es aber folgendes Problem:
tmpStringList enthält die Parameter für die POST-Anfrage und hat nach dem Befüllen aus RequestInfo.Params z.B. den folgenden Inhalt:
tmpStringList.Strings[0]='nick=Anonym'
tmpStringList.Strings[1]='mail=beispiel'
tmpStringList.Strings[2]='msg=Inhalt'
tmpStringList.Strings[3]='id=camponotus'


Das ist soweit auch korrekt. Wenn ich nun aber testweise ein PHP-Skript aufrufe, das lediglich die oben genannten Variablen ausgibt, erhalte ich folgendes Ergebnis:
$id=
$nick=Anonym mail=beispiel msg=Inhalt id=camponotus
$mail=
$msg=


Offensichtlich werden die einzelnen Parameter also nicht getrennt und der komplette String der ersten Variable zugewiesen. Deswegen habe ich eine zweite, im obigen Code auskommentierte Variante zum Einlesen der Parameter ausprobiert, die an alle Parameter ausser dem letzten ein '&' anhängt. Dann sehen tmpStringList und das Ergebnis des PHP-Skripts so aus:
tmpStringList.Strings[0]='nick=Anonym&'
tmpStringList.Strings[1]='mail=beispiel&'
tmpStringList.Strings[2]='msg=Inhalt&'
tmpStringList.Strings[3]='id=camponotus'

=>
$id=
$nick=Anonym
$mail=
$msg=

Jetzt werden die Parameter nach dem ersten '&' also einfach ignoriert.

Mein Ziel wäre folgende Ausgabe:
$nick=Anonym
$mail=beispiel
$msg=Inhalt
$id=camponotus


Kann mir jemand sagen, wie ich das erreiche?
Offensichtlich stimmt ja etwas mit dem Abgrenzen der Parameter nicht. Mit #13+#10 statt '&' will es aber auch nicht gelingen. Genausowenig hilft die direkte Übergabe von RequestInfo.Params.Strings an Post().
Das PHP-Skript ist übrigens nicht die Fehlerquelle, zumindest funktioniert es ohne den Umweg über den Proxy wie erwartet.

Als Entwicklungsumgebung nutze ich Delphi 6 und die mitgelieferte Indy-Version.

Vielen Dank im voraus für alle Lösungen bzw. Anregungen.
  Mit Zitat antworten Zitat
 


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 01:25 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