tags:

views:

9561

answers:

4

How do you pass $_POST values to a page using cURL?

+19  A: 

Should work fine.

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

We have two options here, CURLOPT_POST which turns HTTP POST on, and CURLOPT_POSTFIELDS which contains an array of our post data to submit. This can be used to submit data to POST <form>s.

See:


@pix0r
Heh, need more coffee I think :) Thanks.

Ross
+1  A: 

Check out this page which has an example of how to do it.

Andy Griffin
A: 

@Ross: typo, should be curl_exec($handle).

Perfectly simple example, thanks.

pix0r
+9  A: 

Ross has the right idea for POSTing the usual parameter/value format to a url.

I recently ran into a situation where I needed to POST some XML as Content-Type "text/xml" without any parameter pairs so here's how you do that:

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

In my case, I needed to parse some values out of the HTTP response header so you may not necessarily need to set RETURNTRANSFER or HEADER.

Mark Biek
This is not what the poster is asking, but it just happens to be exactly what I was looking for, thanks!
davr
I'm glad someone else found it helpful.
Mark Biek
your "curl_setopt($httpRequest, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));" solved something that took me couple of hours already! thanks a lot :)
alexeit