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; ...
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.