<?php
/**
* CURL Handlers: Swiss-knife of CURL-based crawlers
* You can define the handler function for the response body after processing response headers.
* For example, the handler can be set according to the value of the Content-type header.
*/
//Include library
require_once('gCurl/gcurl.class.php');
/**
* Define a handler class
*
*/
class Handlers extends gCurlHandlers {
public $charset;
/**
* Process headers (check content type) before assigning the body handler
*
* @param array $headers
*/
function headersHandler(array $headers){
//use 'ctype' as the content type value
// because $headers['content-type'] usually contains charset as well
if (stripos($headers['ctype'],'text') === false){
//it's not a text, don't process it
$this->bodyHandlerName='';
}
$this->charset = $headers['charset'];
}
/**
* The cookies handler method is called after headers handler and before assigning the response body handler.
*
* The method is called only if the server response contains Set-cookie header(s).
* It receives an array of the parsed cookies.
*
* @param array $cookies
*/
function cookiesHandler(array $cookies){
var_export($cookies);
}
/**
* The function MUST return the exact number of bytes it received in the $data_chunk parameter.
* The chunks have unpredictable length between 1 and 8192 bytes (inclusive),
* as received from the remote server.
* The handler is called sequentially for each chunk of a response body.
*
* @param resource $ch
* @param string $data_chunk
*/
function bodyHandler($ch,$data_chunk){
$length = strlen($data_chunk);
echo strtoupper( $data_chunk);
//The body handler should return the nuber of bytes it received
return $length;
}
}
//init variables
$url = 'google.com.ua';
try{
//initialize the class
$curl = new gCurl($url);
//initialize the handlers
$handlers = new Handlers();
//assign handlers
$curl->setHandlers($handlers);
// Response object returned does not have body data if a body handler is defined
$response = $curl->exec();
//$response->body == '';
}catch (gksException $E){
echo $E->getHtmlMessage();
exit;
}
|