Indy Http Get Problem



  • Hallo Gemeinde,

    ich versuche Daten an eine PHP-Seite zu schicken über IdHttp->Get und zwar mit folgendem Code:

    TMemoryStream *InStream=new TMemoryStream();
    AnsiString string1 = "a="  + AdvEdit_Salutation->Text
                       + "\&b=" + AdvEdit_Title->Text
                       + "\&c=" + AdvEdit_Givenname->Text
                       + "\&d=" + AdvEdit_Surname->Text
                       + "\&e=" + AdvEdit_Company->Text
                       + "\&f=" + AdvEdit_Street->Text
                       + "\&g=" + AdvEdit_Zipcode->Text
                       + "\&h=" + AdvEdit_City->Text
                       + "\&i=" + AdvEdit_Phone->Text
                       + "\&j=" + AdvEdit_Email->Text
                       +"\"";
    Edit1->Text = "http://meineseite.de/updates/mfc_reg/get_data.php?"+string1;
    IdHTTP1->Request->ContentType="text/html";
    
    IdHTTP1->Get("http://meineseite.de/updates/mfc_reg/get_data.php?"+string1,InStream);
    
    InStream->Position=0;
    Memo1->Lines->LoadFromStream(InStream);
    
    delete InStream;
    

    Das funktioniert jetzt aber nur solange man in den Edits keine Leerzeichen verwendet, ansonsten steht im InStream nur das Gesendete bis zum Leerzeichen.
    Wenn ich die PHP Seite direkt anspreche geht alles. Der PHP Code ist trivial:

    <?php
    
    print_r($_GET);
    
    echo "test ok"."\n";
    echo  "\n";
    
    echo $_GET[a]."\n";
    echo $_GET[b]."\n";
    echo $_GET[c]."\n";
    echo $_GET[d]."\n";
    echo $_GET[e]."\n";
    echo $_GET[f]."\n";
    echo $_GET[g]."\n";
    echo $_GET[h]."\n";
    echo $_GET[i]."\n";
    echo $_GET[j]."\n";
    
    ?>
    

    Wenn ich den String aus dem Edit nehme und direkt im Browser eingebe kommt das Array richtig zurück.
    Hat jemand eine Idee warum der String unvollständig übergeben wird?
    Danke und Gruß myerscola



  • Kannst du evtl. dem Server-Log entnehmen, was von der Anfrage dort ankommt?



  • müsste man Leerzeichen in der URL nicht encodieren?



  • Die Anfrege endet mit dem ersten Leerzeichen, es liegt also sicher daran was IdHttp sendet. Ich weiß aber nicht wie man die URL schicken muß damit ein Leerzeichen nicht den String terminiert.



  • Was Morle sagt, probier mal application/x-www-form-urlencoded als ContentType.



  • Danke soweit für die Ideen, das brachte jetzt leider auch keine Lösung, jedoch habe ich das hier gefunden:

    Bei der Formulierung eines URL mit Datenübergabe durch die get-Methode müssen Sie einige Konventionen einhalten:

    Leerzeichen müssen durch ein Pluszeichen + ersetzt werden
    Alle Zeichen, deren Zeichencodes 128 bis 255 entsprechen, müssen als Hexadezimalzeichenfolge abgebildet werden, welche durch ein Prozentzeichen eingeleitet wird. Hinter dem Prozentzeichen folgt dann der Hexadezimalwert des jeweiligen Zeichens. Ein "ä" beispielsweise wird dann zu "%E4". Sofern die Daten Zeichen wie &, =, + oder % enthalten, müssen auch diese durch Hexadezimalzeichenfolgen ersetzt werden, weil diese Zeichen ansonsten als Steuerzeichen im Sinne der Regeln zur Unterscheidung von Wert und Schlüssel interpretiert würden.

    (Quelle: http://www.teialehrbuch.de/Kostenlose-Kurse/PHP/9250-Datenuebergabe-mit-URL-Parametern.html)

    Das funktioniert dann auch - alle Leerzeichen müssen vor dem Senden durch ein Pluszeichen ersetzt werden und schon kommt auch das zurück was ich erwarte.


Anmelden zum Antworten