simplecurl
Envoyer des requètes HTTP
La classe simplecurl permet d' envoyer des requètes HTTP plus ou moins complexes grâce à l' extension CURL. NB: la classe fonctionne uniquement avec PHP 5.
Les Méthodes
- simplecurl - Nouvelle Instance
- SetPort - Déterminer le Port
- SetPost - Envoyer une requète POST
- SetUserAgent - Changer le User Agent
- SetReferer - Changer le Referer
- SetHeaders - Envoyer un ou des entêtes particuliers
- GetHeaders - Insérer les entêtes envoyés avec la requète dans la réponse
- SetHttpVersion - changer la version de HTTP
- SetUpload - Réaliser un Upload
- SetUserPassword - Insérer un couple User/Password pour authentification
- ExecRequest - Envoyer la requète
Exemples
- Récupération d' un fichier distant
- Utilisation de simplerss avec simplecurl
- Envoi de données en POST
La Source
<?php
class simplecurl {
public $ch = '';
public $Debug = false;
public $errorlog = '';
public $Headers = '';
private $handle = '';
/**
* @return
* @param string $Url URL a ouvrir
* @param integer $Timeout Timeout de la requete
* @desc Constructeur de la classe , si une url , un pointeur sera crée
*/
public final function __construct($Url='', $Timeout = 0) {
if(!extension_loaded('curl'))
die('Install curl extension');
if($Url)
$this->SetUrl($Url, $Timeout);
}
/**
* @return
* @desc Destructeur de la classe
*/
function __destruct() {
if(is_resource($this->ch))
$this->Close($this->ch);
if(is_resource($this->handle))
fclose($this->handle);
}
/**
* @return
* @param string $Name nom de la methode apellée
* @param array $Arguments Tableau des arguments passés a cette methode
* @desc ....
*/
function __call($Name, $Arguments) {
$this->errorlog .= "[$Name] Cette methode qui n' existe pas !";
}
/**
* @return
* @param string $Url l URL a ouvrir
* @param integer $Timeout
* @desc Ouvre l URL et fixe le Timeout optionnellement
*/
protected function SetUrl($Url, $Timeout = 0) {
if(!$this->ch = curl_init($Url))
$this->errorlog .= "[".__METHOD__ ."] Erreur : .$Url\n";
//curl_setopt ($this->ch, CURLOPT_URL, $Url);
if((int)$Timeout != 0)
$this->SetTimeout((int)$Timeout);
}
/**
* @return
* @param integer $Timeout
* @desc Ouvre fixe le Timeout
*/
protected function SetTimeout($Timeout) {
curl_setopt($this->ch, CURLOPT_TIMEOUT, $Timeout);
}
/**
* @return
* @param integer $Port
* @desc fixe le port ou se connecter
*/
public function SetPort($Port) {
curl_setopt($this->ch, CURLOPT_PORT, $Port);
}
/**
* @return
* @param array $Values
* @desc Construit la chaine a envoyer en POST a partir d un array
*/
public function SetPost($Values) {
$T = array();
foreach($Values as $key => $val) {
$T[] = $key.'='.urlencode($val);
}
curl_setopt($this->ch, CURLOPT_POST, 1);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, implode('&', $T));
}
/**
* @return
* @param string $Useragent
* @desc Fixe un User Agent
*/
public function SetUserAgent($UserAgent) {
curl_setopt($this->ch, CURLOPT_USERAGENT, $UserAgent);
}
/**
* @return
* @param string $referer
* @desc fixe un Referer
*/
public function SetReferer($Referer) {
curl_setopt($this->ch, CURLOPT_REFERER, $Referer);
}
/**
* @return
* @param array $HeadersArray
* @desc envoie des entetes dans la requete
*/
public function SetHeaders($HeadersArray) {
if(is_array($HeadersArray))
curl_setopt ($this->ch, CURLOPT_HTTPHEADER, $HeadersArray);
}
/**
* @return
* @desc Retourne les entetes envoyés avec la requete
*/
public function GetHeaders() {
curl_setopt ($this->ch, CURLOPT_HEADER, 1);
//curl_setopt($this->ch, CURLOPT_NOBODY, 1);
//curl_setopt($this->ch, CURLOPT_HEADERFUNCTION, array($this, 'ReadHeaders'));
}
/**
* @return
* @param string $Version
* @desc Fixe la Version HTTP
*/
public function SetHttpVersion($Version) {
curl_setopt($this->ch, CURLOPT_HTTP_VERSION, $Version);
}
/**
* @return
* @param string $FileName fichier a uploader
* @desc effectue un Upload
*/
public function SetUpload($FileName) {
if(is_readable($FileName)) {
$size = filesize($FileName);
$this->handle = fopen($FileName, 'r');
curl_setopt($this->ch, CURLOPT_INFILE, $this->handle);
curl_setopt($this->ch, CURLOPT_UPLOAD, 1);
curl_setopt($this->ch, CURLOPT_INFILESIZE, $size);
}
else $this->errorlog .= "[".__METHOD__."] Impossible d' ouvrir $FileName";
}
/**
* @return
* @param string $User
* @param string $Password
* @desc Envoie un couple User/Password
*/
public function SetUserPassword($User , $Password) {
curl_setopt ($this->ch, CURLOPT_USERPWD, $User.':'.$Password);
}
/**
* @return Résultat de la requete
* @param string $IntoFile Optionnel : Nom du fichier vers lequel envoyer le résultat
* @desc Exécute la requete
*/
public function ExecRequest($IntoFile = '') {
if($IntoFile) {
$handle = fopen($IntoFile, 'w+');
curl_setopt ($this->ch, CURLOPT_FILE, $handle);
}
else
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
if(!$Result = curl_exec ($this->ch))
$this->errorlog .="[".__METHOD__."] ".curl_error($this->ch);
if($this->Debug == true)
echo $this->DisplayRequestInfos();
//$this->Close();
if($Result == 1)
return true;
else return $Result;
}
/**
* @return
* @desc Ferme la connexion
*/
public function Close() {
curl_close ($this->ch);
}
private function ReadHeaders($ch, $headers) {
$this->Headers = $headers;
return strlen($headers);
}
private function DisplayRequestInfos() {
$ret = '<table style="border:1px solid black;margin-bottom:1em;">';
$ret .= '<tr style="color:red;font-weight:bold;"><td>Evénement</td><td>Résultat</td></tr>';
foreach(curl_getinfo($this->ch) as $key => $val ) {
$ret .= '<tr><td>'.$key.'</td><td>'.$val.'</td></tr>';
}
$ret .= '</table>';
return $ret;
}
}
?>
class simplecurl {
public $ch = '';
public $Debug = false;
public $errorlog = '';
public $Headers = '';
private $handle = '';
/**
* @return
* @param string $Url URL a ouvrir
* @param integer $Timeout Timeout de la requete
* @desc Constructeur de la classe , si une url , un pointeur sera crée
*/
public final function __construct($Url='', $Timeout = 0) {
if(!extension_loaded('curl'))
die('Install curl extension');
if($Url)
$this->SetUrl($Url, $Timeout);
}
/**
* @return
* @desc Destructeur de la classe
*/
function __destruct() {
if(is_resource($this->ch))
$this->Close($this->ch);
if(is_resource($this->handle))
fclose($this->handle);
}
/**
* @return
* @param string $Name nom de la methode apellée
* @param array $Arguments Tableau des arguments passés a cette methode
* @desc ....
*/
function __call($Name, $Arguments) {
$this->errorlog .= "[$Name] Cette methode qui n' existe pas !";
}
/**
* @return
* @param string $Url l URL a ouvrir
* @param integer $Timeout
* @desc Ouvre l URL et fixe le Timeout optionnellement
*/
protected function SetUrl($Url, $Timeout = 0) {
if(!$this->ch = curl_init($Url))
$this->errorlog .= "[".__METHOD__ ."] Erreur : .$Url\n";
//curl_setopt ($this->ch, CURLOPT_URL, $Url);
if((int)$Timeout != 0)
$this->SetTimeout((int)$Timeout);
}
/**
* @return
* @param integer $Timeout
* @desc Ouvre fixe le Timeout
*/
protected function SetTimeout($Timeout) {
curl_setopt($this->ch, CURLOPT_TIMEOUT, $Timeout);
}
/**
* @return
* @param integer $Port
* @desc fixe le port ou se connecter
*/
public function SetPort($Port) {
curl_setopt($this->ch, CURLOPT_PORT, $Port);
}
/**
* @return
* @param array $Values
* @desc Construit la chaine a envoyer en POST a partir d un array
*/
public function SetPost($Values) {
$T = array();
foreach($Values as $key => $val) {
$T[] = $key.'='.urlencode($val);
}
curl_setopt($this->ch, CURLOPT_POST, 1);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, implode('&', $T));
}
/**
* @return
* @param string $Useragent
* @desc Fixe un User Agent
*/
public function SetUserAgent($UserAgent) {
curl_setopt($this->ch, CURLOPT_USERAGENT, $UserAgent);
}
/**
* @return
* @param string $referer
* @desc fixe un Referer
*/
public function SetReferer($Referer) {
curl_setopt($this->ch, CURLOPT_REFERER, $Referer);
}
/**
* @return
* @param array $HeadersArray
* @desc envoie des entetes dans la requete
*/
public function SetHeaders($HeadersArray) {
if(is_array($HeadersArray))
curl_setopt ($this->ch, CURLOPT_HTTPHEADER, $HeadersArray);
}
/**
* @return
* @desc Retourne les entetes envoyés avec la requete
*/
public function GetHeaders() {
curl_setopt ($this->ch, CURLOPT_HEADER, 1);
//curl_setopt($this->ch, CURLOPT_NOBODY, 1);
//curl_setopt($this->ch, CURLOPT_HEADERFUNCTION, array($this, 'ReadHeaders'));
}
/**
* @return
* @param string $Version
* @desc Fixe la Version HTTP
*/
public function SetHttpVersion($Version) {
curl_setopt($this->ch, CURLOPT_HTTP_VERSION, $Version);
}
/**
* @return
* @param string $FileName fichier a uploader
* @desc effectue un Upload
*/
public function SetUpload($FileName) {
if(is_readable($FileName)) {
$size = filesize($FileName);
$this->handle = fopen($FileName, 'r');
curl_setopt($this->ch, CURLOPT_INFILE, $this->handle);
curl_setopt($this->ch, CURLOPT_UPLOAD, 1);
curl_setopt($this->ch, CURLOPT_INFILESIZE, $size);
}
else $this->errorlog .= "[".__METHOD__."] Impossible d' ouvrir $FileName";
}
/**
* @return
* @param string $User
* @param string $Password
* @desc Envoie un couple User/Password
*/
public function SetUserPassword($User , $Password) {
curl_setopt ($this->ch, CURLOPT_USERPWD, $User.':'.$Password);
}
/**
* @return Résultat de la requete
* @param string $IntoFile Optionnel : Nom du fichier vers lequel envoyer le résultat
* @desc Exécute la requete
*/
public function ExecRequest($IntoFile = '') {
if($IntoFile) {
$handle = fopen($IntoFile, 'w+');
curl_setopt ($this->ch, CURLOPT_FILE, $handle);
}
else
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
if(!$Result = curl_exec ($this->ch))
$this->errorlog .="[".__METHOD__."] ".curl_error($this->ch);
if($this->Debug == true)
echo $this->DisplayRequestInfos();
//$this->Close();
if($Result == 1)
return true;
else return $Result;
}
/**
* @return
* @desc Ferme la connexion
*/
public function Close() {
curl_close ($this->ch);
}
private function ReadHeaders($ch, $headers) {
$this->Headers = $headers;
return strlen($headers);
}
private function DisplayRequestInfos() {
$ret = '<table style="border:1px solid black;margin-bottom:1em;">';
$ret .= '<tr style="color:red;font-weight:bold;"><td>Evénement</td><td>Résultat</td></tr>';
foreach(curl_getinfo($this->ch) as $key => $val ) {
$ret .= '<tr><td>'.$key.'</td><td>'.$val.'</td></tr>';
}
$ret .= '</table>';
return $ret;
}
}
?>