Chuyển các giá trị $ _POST với cURL


94

Làm thế nào để bạn chuyển $_POSTcác giá trị cho một trang bằng cách sử dụng cURL?

Câu trả lời:


167

Nên hoạt động tốt.

$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)

Chúng tôi có hai tùy chọn ở đây, CURLOPT_POSTbật HTTP POST và CURLOPT_POSTFIELDSchứa một mảng dữ liệu bài đăng của chúng tôi để gửi. Điều này có thể được sử dụng để gửi dữ liệu cho POST <form>s.


Điều quan trọng cần lưu ý là curl_setopt($handle, CURLOPT_POSTFIELDS, $data);lấy dữ liệu $ ở hai định dạng và điều này xác định cách dữ liệu bài đăng sẽ được mã hóa.

  1. $dataas an array(): Dữ liệu sẽ được gửi như một dữ liệu multipart/form-datakhông phải lúc nào cũng được máy chủ chấp nhận.

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
    
  2. $datadưới dạng chuỗi mã hóa url: Dữ liệu sẽ được gửi dưới dạng application/x-www-form-urlencoded, đây là mã hóa mặc định cho dữ liệu biểu mẫu html đã gửi.

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

Tôi hy vọng điều này sẽ giúp những người khác tiết kiệm thời gian của họ.

Xem:


Ghi chú của bạn đã giúp tôi tiết kiệm ít nhất một giờ gỡ lỗi. Cảm ơn.
Vivek Kumar

30

Ross có ý tưởng phù hợp để ĐĂNG định dạng tham số / giá trị thông thường vào một url.

Gần đây, tôi đã gặp phải tình huống mà tôi cần ĐĂNG một số XML dưới dạng Content-Type "text / xml" mà không có bất kỳ cặp tham số nào, vì vậy đây là cách bạn thực hiện điều đó:

$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);

Trong trường hợp của tôi, tôi cần phải phân tích cú pháp một số giá trị ra khỏi tiêu đề phản hồi HTTP, vì vậy bạn có thể không nhất thiết phải đặt CURLOPT_RETURNTRANSFERhoặc CURLOPT_HEADER.


1
Đây không phải là những gì người đăng yêu cầu, nhưng nó chỉ xảy ra chính xác những gì tôi đang tìm kiếm, cảm ơn!
davr 25/09/08

Tôi rất vui vì ai đó khác thấy nó hữu ích.
Mark Biek

1
của bạn "curl_setopt ($ httpRequest, CURLOPT_HTTPHEADER, array (" Content-Type: text / xml "));" đã giải quyết một cái gì đó mà tôi đã mất vài giờ! thanks a lot :)
Alexei Tenitski

Chào Mark, nếu bạn có thời gian, bạn có thể vui lòng giúp tôi được không? .. Làm ơn. bấm vào đây
jayAnn

Chúng tôi đã dành để cố gắng tìm ra lý do tại sao dữ liệu xml của tôi không được chấp nhận khi được gửi dưới dạng urlencoded. Loại Nội dung và không có mã urlencode đã cứu tôi. Cảm ơn.
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

Một ví dụ PHP đơn giản khác về việc sử dụng cURL:

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

Ví dụ được tìm thấy tại đây: http://devzone.co.in/post-data-using-curl-in-php-a-simple-example/

Thay vì sử dụng curl_setoptbạn có thể sử dụng curl_setopt_array.

http://php.net/manual/en/ Chức năng.curl-setopt-array.php


Cảm ơn bạn!! - Mã của bạn curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Define what you want to postcung cấp cho tôi những gì tôi đang tìm kiếm :)
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
Bạn có thể mở rộng về câu trả lời này? Một vài dòng mã không tạo ra câu trả lời.
Rich Benner

1) Xác định url của bạn 2) Tạo mảng các tham số 3) Initialize curl 4) thiết lập bắt buộc lựa chọn của curl 5) Thực hiện Curl 6) Đóng 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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.