Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] cURL POST Request -> Response ist leer

Einklappen

Neue Werbung 2019

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

  • [Erledigt] cURL POST Request -> Response ist leer

    Hallo Forum,

    ich habe Probleme bei der Verwendung von cURL. Seit längerem Versuche ich per PHP an einen Web Service zu POSTen. Doch leider ohne Erfolg.

    Die Daten sollen als JSON Objekt gepostet werden. Dafür Encodiere ich mir das Array.
    PHP-Code:
    $data json_encode(array(
        
    'name' => 'Namederproduction',
        
    'description' => 'Beschreibungderproduction'
            
    )); 
    PHP-Code:
    curl_setopt($chCURLOPT_POSTFIELDS$data); 

    wenn ich mir $data ausgebe:
    PHP-Code:
    {"name":"Namederproduction","description":"Beschreibungderproduction”} 
    das Format entspricht der Vorgabe und ist auch Json konform. Also so “sollte” es funktionieren.

    PHP-Code:
    var_dump($_POST); 
    Sagt mir jedoch dass meine Response NULL ist. Und auch der Web Service antwortet mir, Bad Request 400.

    PHP-Code:

    $url 
    "http://test/test.json";

    $ch curl_init();

    //Meine Curl Options

    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_CUSTOMREQUESTPOST);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_HEADERtrue);
    curl_setopt($chCURLOPT_CRLFtrue);
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
    curl_setopt($chCURLINFO_HEADER_OUTtrue);
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    curl_setopt($chCURLOPT_COOKIEFILE$cookie);

    $data json_encode(array( 
        
    'name' => 'Namederproduction'
        
    'description' => 'Beschreibungderproduction' 
            
    ));  

    curl_setopt($chCURLOPT_POSTcount($data));
    curl_setopt($chCURLOPT_POSTFIELDS$data);

    //Header
    $header = array('Cookie: login-token=' $token,
        
    'Content-Length: ' strlen($data),
        
    'Content-Type: application/json;charset=UTF-8',
        
    'Accept: application/json;charset=UTF-8');

    curl_setopt($chCURLOPT_HTTPHEADER$header);

    $output curl_exec($ch);

    curl_close($ch);

    print_r($output); 

    Ich arbeite mit OSX und habe einen Apache PHP 5.5.14 auf nem MAMP. (falls das wichtig ist)

    Hat jemand einen Tipp warum es nicht klappt ?

    Hab gefühlt das ganze Netz durchforstet.

  • #2
    PHP führt zu aller Überraschung Code von oben nach Untern aus. Wie willst du $header mitsenden wenn du es erst danach setzt? (Nur mal so nebenbei)

    Ansonsten kann ich dir nur von meinen Erfahrungen erzählen, bei mir Lag es damals an den Fehlenden HTTPS-Einstellungen, du hast zwar welche, aber vielleicht sind die ja falsch. Mehr kann ich dir leider nicht helfen.
    - Laravel

    Kommentar


    • #3
      Hehe, ja das habe ich nur aus meinem kompletten Code für den Forumsbeitrag zusammenkopiert und oben eingefügt. Im Code war es unterhalb ... Ich ändere es

      Kommentar


      • #4
        PHP-Code:
        <?php
        curl_setopt
        ($chCURLOPT_POSTcount($data));
        // [..]
        curl_setopt($chCURLOPT_POSTFIELDS$data);
        ?>
        $data ist also ein Array. Wo ist jetzt dein JSON?
        PHP-Code:
        <?php
        curl_setopt
        ($chCURLOPT_POSTFIELDSjson_encode($data));
        ?>
        Google "php curl post json body" => http://www.lornajane.net/posts/2011/...-with-php-curl
        "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

        Kommentar


        • #5
          Zitat von Chriz Beitrag anzeigen
          [php]
          $data ist also ein Array. Wo ist jetzt dein JSON?
          Ich hatte es grad ungünstig formatiert. Jetzt sollte es klarer sein. Pardon.

          Wenn ich $data ausgebe wird es Json-formatiert ausgegeben. Nur bekomme ich die Daten im weiteren Schritt nicht gePostet !?

          Wenn ich den cURL Befehl im Terminal ausführe funktioniert's wie gewollt.

          Code:
          curl -v \
               -b cookie.txt \
               -X POST \
               -H "Content-Type: application/json" \
               -d '{"name":"Namederproduction”, "description":"Beschreibungderproduction”}' \
               http://test/test.json

          Kommentar


          • #6
            Der Fehler war im Header.

            Der Header muss als erste Information den Content Type übergeben bekommen.

            $header = array('Content-Type: application/json;',.....


            (ERLEDIGT)

            Kommentar

            Lädt...
            X