SimpleHttp
Envoyer des requètes HTTP simples et récupérer le résultat
La classe SimpleHttp fournit des methodes permettant d'envoyer des requètes HTTP tout en controlant le temps impartie a ces requètes. Elle gére les requètes simples GET et HEAD, parse les entêtes retounées pour qu'elle soient facilement utilisables, permet de mettre le résultat dans un cache serveur pour accélérer les requètes suivantes. Cette classe a été développée dans le but de servir les requètes destinées a l'agrégateur RSS simpleRSS. Elle est donc limitée dans la prise en charge de HTTP .. . Copier le fichier de classe dans un répertoire accessible en inclusion, puis créer un répertoire cache dans le dossier des scripts dans lesquels vous souhaitez utiliser la classe de cachecore. NB: la classe fonctionne uniquement avec PHP 5
Les Méthodes
- simplehttp - Nouvelle Instance
- readsocket - Lire le résultat
- $this->header - Header.
- $this->body - Body.
Exemples
La Source
class urlopen {
private $url;
private $req;
private $timeout;
var $header;
var $body;
var $errorlog;
var $cachetime;
public function __construct($url,$req='GET',$cachetime='600',$timeout='1') {
require_once ('chrono.class.php');
$this->url = $url;
$this->req = $req;
$this->cachetime = $cachetime;
$this->timeout = $timeout;
}
private function parseurl($urls) {
$pos=strpos($urls, "://");
$url['proto']=substr($urls, 0,$pos);
$rest=substr($urls,$pos+3);
$pos=strpos($rest, "/");
$url['domaine']=substr($rest,0,$pos);
$url['qs']=substr($rest,$pos);
return $url;
}
private function get_header($string) {
$h=explode("\n",$string);
$hout = array();
$hout['response'] = current($h);
next($h);
while(list(,$hline) = each ($h) ) {
$hline=explode(":",$hline);
if ( isset($hline[1]) && strpos($hline[1],";") ) {
$hlinecsp=explode(";",$hline[1]);
$hout[trim($hline[0])] = $hlinecsp ;
} else {
if (isset($hline[1]))
$hout[trim($hline[0])] = trim ($hline[1]) ;
else
$hout[trim($hline[0])] ='';
}
}
return $hout;
}
public function readsocket( $use_cache = 'NO_CACHE' ) {
$cache = new cachecore( $this->url.$this->req );
if ( $use_cache==='USE_CACHE' && $output = $cache->get_cached_data( $this->cachetime ) ) {
$this->parse_response($output);
return TRUE;
}
$urltab = $this->parseurl($this->url);
$chrono = new Chrono;
$chrono->start();
$fp = @fsockopen ($urltab['domaine'], 80, $errno, $errstr, $this->timeout);
if (!$fp) {
$this->errorlog .= "$errstr ($errno)\n";
return FALSE;
} else {
fputs ($fp, "{$this->req} {$urltab['qs']} HTTP/1.0\r\nHost: {$urltab['domaine']}\r\n\r\n");
$data = '';
while (!feof($fp)) {
if ($chrono->stop()>$this->timeout) {
$this->errorlog .= "break - too long\n";
return FALSE;
}
$data .= fgets ($fp,256);
}
fclose ($fp);
if ($use_cache==='USE_CACHE') $cache->put_cached_data($data);
$this->parse_response($data);
}
return TRUE;
}
private function parse_response($data) {
if ($pos=strpos($data, "\r\n\r\n"));
else ($pos=0);
$header = substr($data, 0,$pos);
$this->header=$this->get_header($header);
$this->body = ltrim(substr($data, $pos));
}
}
?>