tobi85: PHP CURL Post

Hallo,

wie kann ich mit CURL "automatisch" ein Formular absenden und die Post-Daten übergeben. Wenn ich es wie folgt mache, bekomme ich keinen Error, aber auch keine Response. Wenn ich das Formular "normal" über manuell absende, gelange ich zu der URL und die Post-Daten werden entsprechend übermittelt.

curl_setopt($ch, CURLOPT_URL, $this->url);
		
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
		
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
		
$return = curl_exec($ch);
  1. Hallo,

    wie kann ich mit CURL "automatisch" ein Formular absenden und die Post-Daten übergeben.

    Äh. Mit PHP sendest Du allenfalls ein Formular am den Browser.

    Zu Deiner Frage:

    1.) Du hast zwar schon "gesagt", dass Du weder error noch response bekommst, aber schicke doch die Daten mal am ein Skript, welches Dir mit

    <pre>
    <?php print_r($_POST); ?>
    </pre>
    

    die empfangen Daten "stur und dumm" ausgibt. Und wirf einen Blick auf beide error-logs. Sowohl des Clients (der auf dem PHP läuft) und des servers (wo der request hingehen soll.

    2.) Es dürfte eine gute Idee sein, sich mal anzuschauen, was

    • $this->url
    • $data

    überhaupt liefern und

    3.) ich sehe nicht, wo und wie du einen eventuellen Fehler auswertest. Das aber ist Deine erste Pflicht.

  2. Server: (POST.php)

    <?php
    header('Content-Type:text/plain; charset=utf-8');
    echo json_encode($_POST);
    

    Client:

    <?php
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    
    header('Content-Type:text/plain');
    
    $data['foo']='bar';
    
    if (function_exists('curl_init')) {
        $ch = curl_init('https://192.168.1.251/Tests/POST.php');
        if ($ch) {
            ### curl_setopt($ch, CURLOPT_URL, $this->url); 
            ### Hä? Wozu? Schmeisst einen Fehler! Mach das weg!
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            $ret = curl_exec($ch);
            if ($ret) {
                echo "Antwort:\n\n";
                print_r($ret);
            } else {
                echo 'Curl-Fehler: ' . curl_error($ch) . "\n";
            }
        } else {
            echo "Curl wurde nicht initialisiert.\n";
        }
    } else {
         echo "Curl ist nicht installiert.\n";
    }
    

    Abruf des Client-Skriptes im Browser:

    Antwort:
    
    {"foo":"bar"}
    

    Geht also. Allerdings musste ich erst

    sudo apt-get install php-curl
    

    und dann noch

    sudo service apache2 restart
    

    ausführen. Weil php-curl (Ich hab php 7 auf dem Testsystem) nicht installiert war bzw. das Modul nicht automatisch aktiviert wurde.