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

  • inkassohans
    hat ein Thema erstellt [Erledigt] cURL korrekt in PHP übersetzt ?.

    [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 ?

  • inkassohans
    antwortet
    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!

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    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...

    Einen Kommentar schreiben:


  • inkassohans
    antwortet
    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"

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    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.

    Einen Kommentar schreiben:


  • inkassohans
    antwortet
    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.

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    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; 

    Einen Kommentar schreiben:

Lädt...
X