par
Invité » 23 mai 2007, 12:17
Je t'envoie un bout de script qui utilise la librairie CURL.
Je l'ai utilisé pour accéder à une page filtrée par un (login/password) et(/ou) franchir un proxy.
CURL gère les cookies de sessions.
On peut en garder une copie en local, pour voir.
<?php
function checkSet($val)
{
if (!(isset($val)))
{
// echo "Attention : paramètre indéfinit<br>\n";
}
}
function openRessource()
{
$ressource = curl_init();
// echo "La ressource:".$ressource."<br>";
return $ressource;
}
function closeRessource($ress)
{
checkSet($ress);
// vérification des erreurs
if (curl_errno($ress)) {
print curl_error($ress);
}
// fermeture des ressources
curl_close($ress);
// echo "<br>Ressource fermée.<br>";
}
function setOption($ress,$name,$val)
{
checkSet($ress);
checkSet($name);
checkSet($val);
// echo "<hr>".$name."=".$val.":";
// echo curl_setopt($ress, $name, $val);
curl_setopt($ress, $name, $val);
// echo "<br>";
}
function configureRessource_for_company($ress)
{
checkSet($ress);
//TRUE pour effectuer un tunnel à travers un proxy HTTP.
// setOption($ress,CURLOPT_HTTPPROXYTUNNEL,1);
//Le nom du proxy HTTP au tunnel qui le demande.
setOption($ress,CURLOPT_PROXY, "XX.XXX.XX.XX:XXX");
//Un nom d'utilisateur et un mot de passe formattés sous la forme "[username]:[password]" à utiliser pour la connexion avec le proxy.
setOption($ress,CURLOPT_PROXYUSERPWD, "login proxy:password proxy");
return true;
}
function configureRessource_core($ress)
{
global $COOKIENAME;
checkSet($ress);
//Le fichier où sera écrit le transfert. Par défaut, STDOUT (la fenêtre du navigateur).
//curl_setopt($ch, CURLOPT_FILE, $fp);
//TRUE pour inclure l'en-tête dans la valeur de retour.
// setOption($ress,CURLOPT_HEADER, 1);
setOption($ress,CURLOPT_HEADER, 0);
//Le contenu de l'en-tête "User-Agent: " à utiliser dans une requête HTTP.
setOption ($ress, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
//curl_setopt ($ress, CURLOPT_DEBUGFUNCTION, 1)
//TRUE pour suivre toutes les en-têtes "Location: " que le serveur envoie dans les en-têtes HTTP
setOption($ress, CURLOPT_FOLLOWLOCATION, 1);
//TRUE pour fixer automatiquement le champ Referer: dans les requêtes où une redirection Location: suit.
setOption($ress, CURLOPT_AUTOREFERER, 1);
//La méthode d'identification HTTP à utiliser.
setOption($ress,CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//setOption($ress,CURLOPT_SSL_VERIFYPEER,true);
setOption($ress,CURLOPT_SSL_VERIFYHOST, false);
setOption($ress,CURLOPT_SSL_VERIFYPEER,false);
//TRUE pour afficher tous les événements. Écrit la sortie sur stderr ou dans le fichier spécifié en utilisant CURLOPT_STDERR.
setOption($ress,CURLOPT_VERBOSE,1);
//retourne directement le transfert sous forme de chaîne de la valeur retournée par curl_exec() au lieu de l'afficher directement.
setOption($ress,CURLOPT_RETURNTRANSFER,1);
//TRUE pour marquer ceci comme un nouveau cookie "session".
// setOption ($ress, CURLOPT_COOKIESESSION, 1);
setOption ($ress,CURLOPT_COOKIEFILE,$COOKIENAME);
setOption ($ress,CURLOPT_COOKIEJAR,$COOKIENAME);
return true;
}
function configureRessource($ress)
{
checkSet($ress);
$toReturn = true;
/* if ($toReturn)
{
$toReturn = configureRessource_for_company($ress);
}
*/
if ($toReturn)
{
$toReturn = configureRessource_core($ress);
}
return $toReturn;
}
function openPage_Core($ress,$url,$post)
{
checkSet($ress);
checkSet($url);
checkSet($post);
if ($post)
{
configureRessource_for_post($ress);
}
setOption($ress, CURLOPT_URL, $url);
return curl_exec($ress);
}
function openPage($url,$post,$cookieBackupName="")
{
global $COOKIENAME;
checkSet($url);
checkSet($post);
$toReturn = "";
if (!($ressource = openRessource()))
{
echo "Il n'y a pas de ressource<br>\n";
}
else
{
if (!(configureRessource($ressource)))
{
echo "Impossible de configurer la ressource<br>\n";
}
else
{
if (!($toReturn = openPage_Core($ressource,$url,$post)))
{
echo "Impossible d'ouvrir l'url";
}
}
closeRessource($ressource);
if($cookieBackupName)
{
duplicateFile($COOKIENAME,$cookieBackupName);
}
}
return $toReturn;
}
//echo openPage("TON URL",false);
?>
Je t'envoie un bout de script qui utilise la librairie CURL.
Je l'ai utilisé pour accéder à une page filtrée par un (login/password) et(/ou) franchir un proxy.
CURL gère les cookies de sessions.
On peut en garder une copie en local, pour voir.
[php]<?php
function checkSet($val)
{
if (!(isset($val)))
{
// echo "Attention : paramètre indéfinit<br>\n";
}
}
function openRessource()
{
$ressource = curl_init();
// echo "La ressource:".$ressource."<br>";
return $ressource;
}
function closeRessource($ress)
{
checkSet($ress);
// vérification des erreurs
if (curl_errno($ress)) {
print curl_error($ress);
}
// fermeture des ressources
curl_close($ress);
// echo "<br>Ressource fermée.<br>";
}
function setOption($ress,$name,$val)
{
checkSet($ress);
checkSet($name);
checkSet($val);
// echo "<hr>".$name."=".$val.":";
// echo curl_setopt($ress, $name, $val);
curl_setopt($ress, $name, $val);
// echo "<br>";
}
function configureRessource_for_company($ress)
{
checkSet($ress);
//TRUE pour effectuer un tunnel à travers un proxy HTTP.
// setOption($ress,CURLOPT_HTTPPROXYTUNNEL,1);
//Le nom du proxy HTTP au tunnel qui le demande.
setOption($ress,CURLOPT_PROXY, "XX.XXX.XX.XX:XXX");
//Un nom d'utilisateur et un mot de passe formattés sous la forme "[username]:[password]" à utiliser pour la connexion avec le proxy.
setOption($ress,CURLOPT_PROXYUSERPWD, "login proxy:password proxy");
return true;
}
function configureRessource_core($ress)
{
global $COOKIENAME;
checkSet($ress);
//Le fichier où sera écrit le transfert. Par défaut, STDOUT (la fenêtre du navigateur).
//curl_setopt($ch, CURLOPT_FILE, $fp);
//TRUE pour inclure l'en-tête dans la valeur de retour.
// setOption($ress,CURLOPT_HEADER, 1);
setOption($ress,CURLOPT_HEADER, 0);
//Le contenu de l'en-tête "User-Agent: " à utiliser dans une requête HTTP.
setOption ($ress, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
//curl_setopt ($ress, CURLOPT_DEBUGFUNCTION, 1)
//TRUE pour suivre toutes les en-têtes "Location: " que le serveur envoie dans les en-têtes HTTP
setOption($ress, CURLOPT_FOLLOWLOCATION, 1);
//TRUE pour fixer automatiquement le champ Referer: dans les requêtes où une redirection Location: suit.
setOption($ress, CURLOPT_AUTOREFERER, 1);
//La méthode d'identification HTTP à utiliser.
setOption($ress,CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//setOption($ress,CURLOPT_SSL_VERIFYPEER,true);
setOption($ress,CURLOPT_SSL_VERIFYHOST, false);
setOption($ress,CURLOPT_SSL_VERIFYPEER,false);
//TRUE pour afficher tous les événements. Écrit la sortie sur stderr ou dans le fichier spécifié en utilisant CURLOPT_STDERR.
setOption($ress,CURLOPT_VERBOSE,1);
//retourne directement le transfert sous forme de chaîne de la valeur retournée par curl_exec() au lieu de l'afficher directement.
setOption($ress,CURLOPT_RETURNTRANSFER,1);
//TRUE pour marquer ceci comme un nouveau cookie "session".
// setOption ($ress, CURLOPT_COOKIESESSION, 1);
setOption ($ress,CURLOPT_COOKIEFILE,$COOKIENAME);
setOption ($ress,CURLOPT_COOKIEJAR,$COOKIENAME);
return true;
}
function configureRessource($ress)
{
checkSet($ress);
$toReturn = true;
/* if ($toReturn)
{
$toReturn = configureRessource_for_company($ress);
}
*/
if ($toReturn)
{
$toReturn = configureRessource_core($ress);
}
return $toReturn;
}
function openPage_Core($ress,$url,$post)
{
checkSet($ress);
checkSet($url);
checkSet($post);
if ($post)
{
configureRessource_for_post($ress);
}
setOption($ress, CURLOPT_URL, $url);
return curl_exec($ress);
}
function openPage($url,$post,$cookieBackupName="")
{
global $COOKIENAME;
checkSet($url);
checkSet($post);
$toReturn = "";
if (!($ressource = openRessource()))
{
echo "Il n'y a pas de ressource<br>\n";
}
else
{
if (!(configureRessource($ressource)))
{
echo "Impossible de configurer la ressource<br>\n";
}
else
{
if (!($toReturn = openPage_Core($ressource,$url,$post)))
{
echo "Impossible d'ouvrir l'url";
}
}
closeRessource($ressource);
if($cookieBackupName)
{
duplicateFile($COOKIENAME,$cookieBackupName);
}
}
return $toReturn;
}
//echo openPage("TON URL",false);
?>[/php]