The PHP Code

The following PHP code example posts to http://www.example.com/path/to/form sending three sets of values.
<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/path/to/form");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);

$data = array(
    'foo' => 'foo foo foo',
    'bar' => 'bar bar bar',
    'baz' => 'baz baz baz'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

CURLOPT_RETURNTRANSFER

The "curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);" line is not actually necessary but it means the HTML from the web page returned goes into the $output variable rather than echoed out to standard output.

CURLOPT_POST

The "curl_setopt($ch, CURLOPT_POST, true);" line tells CURL that this is POST instead of the default GET.'

CURLOPT_POSTFIELDS

The $data array contains the POST field values. The first of these has the name 'foo' and value 'foo foo foo'; the equivilent HTML form value for this might be something like <input type='hidden' name='foo' value='foo foo foo' />
The post field values are then set with the "curl_setopt($ch, CURLOPT_POSTFIELDS, $data);" line. $data can optionally be a string formatted in the same way a GET string is (e.g. foo=foo+foo+foo&bar=bar+bar+bar etc) but I find it easier to use an array.

curl_getinfo()

The "$info = curl_getinfo($ch);" is also not required but returns an array of useful data about the request. Example output from the above would look something like so:
Array
(
    [url] => http://www.example.com/path/to/form
    [content_type] => text/html; charset=UTF-8
    [http_code] => 200
    [header_size] => 516
    [request_size] => 197
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 2.256708
    [namelookup_time] => 0.672754
    [connect_time] => 0.899986
    [pretransfer_time] => 0.900012
    [size_upload] => 240
    [size_download] => 18717
    [speed_download] => 8293
    [speed_upload] => 106
    [download_content_length] => 0
    [upload_content_length] => 240
    [starttransfer_time] => 1.12957
    [redirect_time] => 0
)
Getting the http_code from the information can be useful so you know if it successfully connected to the page before parsing any of the return data.

0 comments:

Post a Comment

Subscribe to RSS Feed Follow me on Twitter!