Przekazywanie wartości $ _POST za pomocą cURL


Odpowiedzi:


168

Powinno działać dobrze.

$data = array('name' => 'Ross', 'php_master' => true);

// You can POST a file by prefixing with an @ (for <input type="file"> fields)
$data['file'] = '@/home/user/world.jpg';

$handle = curl_init($url);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
curl_exec($handle);
curl_close($handle)

Mamy tutaj dwie opcje, CURLOPT_POSTktóre włączają HTTP POST i CURLOPT_POSTFIELDSzawierają tablicę naszych danych postów do przesłania. Można to wykorzystać do przesłania danych do POST <form>s.


Należy zauważyć, że curl_setopt($handle, CURLOPT_POSTFIELDS, $data);dane $ są pobierane w dwóch formatach i że to określa sposób kodowania danych pocztowych.

  1. $datajako array(): Dane zostaną wysłane jako, multipart/form-dataktóre nie zawsze są akceptowane przez serwer.

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
    
  2. $datajako ciąg zakodowany jako adres URL: dane zostaną wysłane jako application/x-www-form-urlencoded, co jest domyślnym kodowaniem dla przesłanych danych formularza html.

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));
    

Mam nadzieję, że pomoże to innym zaoszczędzić czas.

Widzieć:


Twoja notatka pozwoliła mi zaoszczędzić przynajmniej godzinę na debugowaniu. Dzięki.
Vivek Kumar

30

Ross ma dobry pomysł na przesłanie zwykłego formatu parametru / wartości do adresu URL.

Niedawno natknąłem się na sytuację, w której musiałem opublikować plik XML jako tekst / xml typu Content-Type bez żadnych par parametrów, więc oto jak to zrobić:

$xml = '<?xml version="1.0"?><stuff><child>foo</child><child>bar</child></stuff>';
$httpRequest = curl_init();

curl_setopt($httpRequest, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($httpRequest, CURLOPT_HTTPHEADER, array("Content-Type:  text/xml"));
curl_setopt($httpRequest, CURLOPT_POST, 1);
curl_setopt($httpRequest, CURLOPT_HEADER, 1);

curl_setopt($httpRequest, CURLOPT_URL, $url);
curl_setopt($httpRequest, CURLOPT_POSTFIELDS, $xml);

$returnHeader = curl_exec($httpRequest);
curl_close($httpRequest);

W moim przypadku musiałem przeanalizować niektóre wartości z nagłówka odpowiedzi HTTP, więc niekoniecznie musisz ustawić CURLOPT_RETURNTRANSFERlub CURLOPT_HEADER.


1
Nie o to pyta plakat, ale tak się składa, że ​​jest to dokładnie to, czego szukałem, dzięki!
davr

Cieszę się, że ktoś inny uznał to za pomocne.
Mark Biek

1
twoja "curl_setopt ($ httpRequest, CURLOPT_HTTPHEADER, tablica (" Content-Type: text / xml "));" rozwiązałem coś, co zajęło mi już kilka godzin! wielkie dzięki :)
Alexei Tenitski

Cześć Mark, jeśli masz czas, czy możesz mi pomóc? .. Proszę. kliknij tutaj
jayAnn

Spędziliśmy nasze, próbując dowiedzieć się, dlaczego moje dane xml nie zostały zaakceptowane, gdy zostały wysłane jako zakodowane w formacie urlencoded. Zapisał mnie typ zawartości i brak kodu urlencode. Dzięki.
Samuel

3
$query_string = "";

if ($_POST) {
    $kv = array();
    foreach ($_POST as $key => $value) {
        $kv[] = stripslashes($key) . "=" . stripslashes($value);
    }
    $query_string = join("&", $kv);
}

if (!function_exists('curl_init')){
    die('Sorry cURL is not installed!');
}

$url = 'https://www.abcd.com/servlet/';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($kv));
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);

curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

$result = curl_exec($ch);

curl_close($ch);

3

Kolejny prosty przykład użycia cURL w PHP:

<?php
    $ch = curl_init();                    // Initiate cURL
    $url = "http://www.somesite.com/curl_example.php"; // Where you want to post data
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST, true);  // Tell cURL you want to post something
    curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Define what you want to post
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return the output in string format
    $output = curl_exec ($ch); // Execute

    curl_close ($ch); // Close cURL handle

    var_dump($output); // Show output
?>

Przykład znaleziony tutaj: http://devzone.co.in/post-data-using-curl-in-php-a-simple-example/

Zamiast używać curl_setopt, możesz użyćcurl_setopt_array .

http://php.net/manual/en/function.curl-setopt-array.php


Dziękuję Ci!! - Twój kod curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Define what you want to postdostarczył mi tego, czego szukałem :)
asugrue15



1
$url='Your url'; // Specify your url
$data= array('parameterkey1'=>value,'parameterkey2'=>value); // Add parameters in key value
$ch = curl_init(); // Initialize cURL
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);

1
Czy mógłbyś rozwinąć tę odpowiedź? Kilka linijek kodu nie daje odpowiedzi.
Rich Benner

1) Określ swój adres URL 2) Utwórz tablicę parametrów 3) Zainicjuj curl 4) Ustaw Wymagane opcje curl 5) Wykonaj Curl 6) Zamknij Curl
Aniket B

0
<?php
    function executeCurl($arrOptions) {

        $mixCH = curl_init();

        foreach ($arrOptions as $strCurlOpt => $mixCurlOptValue) {
            curl_setopt($mixCH, $strCurlOpt, $mixCurlOptValue);
        }

        $mixResponse = curl_exec($mixCH);
        curl_close($mixCH);
        return $mixResponse;
    }

    // If any HTTP authentication is needed.
    $username = 'http-auth-username';
    $password = 'http-auth-password';

    $requestType = 'POST'; // This can be PUT or POST

    // This is a sample array. You can use $arrPostData = $_POST
    $arrPostData = array(
        'key1'  => 'value-1-for-k1y-1',
        'key2'  => 'value-2-for-key-2',
        'key3'  => array(
                'key31'   => 'value-for-key-3-1',
                'key32'   => array(
                    'key321' => 'value-for-key321'
                )
        ),
        'key4'  => array(
            'key'   => 'value'
        )
    );

    // You can set your post data
    $postData = http_build_query($arrPostData); // Raw PHP array

    $postData = json_encode($arrPostData); // Only USE this when request JSON data.

    $mixResponse = executeCurl(array(
        CURLOPT_URL => 'http://whatever-your-request-url.com/xyz/yii',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPGET => true,
        CURLOPT_VERBOSE => true,
        CURLOPT_AUTOREFERER => true,
        CURLOPT_CUSTOMREQUEST => $requestType,
        CURLOPT_POSTFIELDS  => $postData,
        CURLOPT_HTTPHEADER  => array(
            "X-HTTP-Method-Override: " . $requestType,
            'Content-Type: application/json', // Only USE this when requesting JSON data
        ),

        // If HTTP authentication is required, use the below lines.
        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
        CURLOPT_USERPWD  => $username. ':' . $password
    ));

    // $mixResponse contains your server response.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.