11.2. Fetching a URL with the POST Method
Problem
You want to retrieve a URL with the POST method, not the default GET method. For example, you want to submit an HTML form.
Solution
Use the cURL extension with the CURLOPT_POST
option set:
$c = curl_init('http://www.example.com/submit.php');
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, 'monkey=uncle&rhino=aunt');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($c);
curl_close($c);If the cURL extension isn’t available, use the PEAR
HTTP_Request class:
require 'HTTP/Request.php';
$r = new HTTP_Request('http://www.example.com/submit.php');
$r->setMethod(HTTP_REQUEST_METHOD_POST);
$r->addPostData('monkey','uncle');
$r->addPostData('rhino','aunt');
$r->sendRequest();
$page = $r->getResponseBody();Discussion
Sending a POST method request requires special handling of any
arguments. In a GET request, these arguments are in the query string,
but in a POST request, they go in the request body. Additionally, the
request needs a
Content-Length
header that tells the server the size of the content to expect in the
request body.
Because of the argument handling and additional headers, you
can’t use fopen( ) to make a POST
request. If neither cURL nor HTTP_Request are
available, use the pc_post_request( )
function, shown in Example 11-1, which makes the connection to the remote web
server with fsockopen( )
.
Example 11-1. pc_post_request( )
function pc_post_request($host,$url,$content='') { $timeout = 2; ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access