Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] cURL korrekt in PHP übersetzt ?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] cURL korrekt in PHP übersetzt ?

    Hallo Leute, meine cURL Anfrage sieht folgendermaßen aus:

    PHP-Code:
    curl -\
         -
    b cookie.txt \
         -
    X POST \
         -
    ':parameters={"ziel": "http://test.com/test.json", "mediaPaths": ["media://testfile_a_1.mxf", "media://testfile_a_2.mxf", "media://testfile_a_3.mxf", "media://testfile_a_4.mxf"], "comment": "Test"}' \
    http://test.com/jobs/ingest.json 
    Also, ein Formular mit...
    Key = arameters

    Value = {"destination": "http://test.com/test.json", "mediaPaths": ["media://testfile_a_1.mxf", "media://testfile_a_2.mxf", "media://testfile_a_3.mxf", "media://testfile_a_4.mxf"], "comment": "Test"}

    ODER ?

    PHP-Code:
    //Erstelle MediaPaths Array
    $mediaPaths_array = array("media://testfile_a_1.mxf""media://testfile_a_2.mxf""media://testfile_a_3.mxf""media://testfile_a_4.mxf");

    //Json_Encode MediaPaths Array
    $data = array(
            
    ':parameters' => json_encode(array('destination' => 'http://test.com/test.json''mediaPaths' => $mediaPaths_array'comment' => 'Kommentar'), JSON_UNESCAPED_SLASHES)
            ); 

    Das ist meine Ausgabe:

    PHP-Code:
    Array ( [:parameters] => {"destination":"http://test.com/test.json","mediaPaths":["media://testfile_a_1.mxf","eamedia://testfile_a_2.mxf","media://testfile_a_3.mxf","media://testfile_a_4.mxf"],"comment":"Kommentar"} ) 
    Ich ich bin mir unsicher, weil mein Server empfängt einen request und regiert auch darauf (HTTP 201), jedoch kann er mit den Daten ... so wie sie formatiert sind ... nichts anfangen. Der erstellte Job failt ! Ich habe es MIT und OHNE Content-Type: application/json; Angabe im Header versucht ... beides führt zum selben Ergebnis.

    Der Value von Parameters ist doch ein Json Objekt oder ? Was sagen die Fachmänner ?

  • #2
    Stichwort urlencode/urldecode

    Hier ein Beispielcode, der dein Problem verdeutlicht... entferne die urlencode/urldecode Aufrufe, dann kommt nur noch ein '{' im Script an.
    PHP-Code:
    if (!empty($_POST[':parameters'])) {
        
    var_dump($_POST);
        
    var_dump(json_decode(urldecode($_POST[':parameters'])));
    }

    $json urlencode('{"destination":"http://test.com/test.json","mediaPaths":["media://testfile_a_1.mxf","eamedia://testfile_a_2.mxf","media://testfile_a_3.mxf","media://testfile_a_4.mxf"],"comment":"Kommentar"}');
    echo 
    '<form action="" method="POST"><input type="hidden" name=":parameters" value="'.$json.'"><input type="submit" value="abschicken"></form>';

    exit; 
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      DANKE lstegelitz !!!

      URLencode! Daran habe ich noch garnicht gedacht. Schließlich muss ich die ganzen Informationen ja in einem einzigen Value verpacken. Deinen Codeschnipsel werde ich sofort mal in mein Script eingebinden!

      Übernimmt mein Server dann das json und url decodieren ?
      oder muss ich ihm das über CURLOPT_POSTFIELDS vorgeben ?

      PHP-Code:
      curl_setopt($chCURLOPT_POSTFIELDSjson_decode(urldecode($_POST[':parameters']))); 
      weil ich muss meinem Header ja später die Information mitgeben welcher Content Type gleich kommt.

      Kommentar


      • #4
        Nimm mal urlencode und decode raus, setz das input field von "hidden" auf "text" und copy&paste den String so wie er ist in das input Feld... es funktioniert magischerweise, der Browser urlencoded automatisch und PHP urldekodiert automatisch.

        Wenn du nun aber versuchst, einen String an ein Formfield zu bappen, der double quotes enthält, dann schrottet das die double quotes im HTML... um also doubles quotes in ein HTML input zu bekommen, das sein value mit double quotes umschliesst, braucht es eine Kodierung (prinzipiell egal welche, ein simples str_replace reicht schon um die double quotes umzuwandeln, allerdings muss das auf Serverseite wieder umgekehrt werden).

        Der Browser wird das value IN JEDEM FALL urlencoden! Dh. wenn du einen urlencodeten String ans Formfield bindest, wird das vor dem Senden erneut urlcodiert (doppelt also). PHP urldecodet automatisch, aber natürlich nur einmal, ein eventuelles doppeltes Encoding musst du dann von Hand wieder auflösen.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Danke lstegelitz für deine Erklärung. Ich hab's getestet. Die Daten sollen in meinem Script im Hintergrund (Also im "hidden" Fall) konstruiert werden. Ich URLen und URLdecodiere die Daten daher. Danke!


          URLencodierte $_POST wie sie vom Form kommt:
          $_POST['arameters']:
          PHP-Code:
          string(282"%7B%22destination%22%3A%22http%3A%2F%2Ftest.com%2Ftest.json%22%2C%22mediaPaths%22%3A%5B%22media%3A%2F%2Ftestfile_a_1.mxf%22%2C%22eamedia%3A%2F%2Ftestfile_a_2.mxf%22%2C%22media%3A%2F%2Ftestfile_a_3.mxf%22%2C%22media%3A%2F%2Ftestfile_a_4.mxf%22%5D%2C%22comment%22%3A%22Kommentar%22%7D" 
          URLDECODE von $_POST['arameters']:
          PHP-Code:
          string(190"{"destination":"http://test.com/test.json","mediaPaths":["media://testfile_a_1.mxf","eamedia://testfile_a_2.mxf","media://testfile_a_3.mxf","media://testfile_a_4.mxf"],"comment":"Kommentar"}" 
          Kannst du mir noch verraten warum du in deinem ersten Post noch ein JsonDecode verwendet hast ?

          JSONDECODE_URLDECODE von $_POST['arameters']:
          PHP-Code:
          object(stdClass)#1 (3) {
            
          ["destination"]=>
            
          string(25"http://test.com/test.json"
            
          ["mediaPaths"]=>
            array(
          4) {
              [
          0]=>
              
          string(24"media://testfile_a_1.mxf"
              
          [1]=>
              
          string(26"media://testfile_a_2.mxf"
              
          [2]=>
              
          string(24"media://testfile_a_3.mxf"
              
          [3]=>
              
          string(24"media://testfile_a_4.mxf"
            
          }
            [
          "comment"]=>
            
          string(9"Kommentar"

          Kommentar


          • #6
            Erst das json_decode macht aus einem (JSON) String wieder ein Object vom Typ stdClass. Ohne das json_decode hast du im PHP Script einfach nur einen String...
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Code:
              curl_setopt($ch, CURLOPT_CRLF, true);
              Das war der Fehler. Lasse ich es weg gehts wunderbar ! Hatte mir erhofft das Sonderzeichen übersetzt werden.

              ERLEDIGT !!!



              DANKE FÜR DEINE HILFE !!! lstegelitz!

              Kommentar

              Lädt...
              X