Quelle methode pour recuperer des données sur un site

nildv Messages postés 40 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 11 juin 2007 - 7 mars 2007 à 15:46
nildv Messages postés 40 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 11 juin 2007 - 12 mars 2007 à 08:02
Bonjour,
Je dois coder un script qui permette de recuperer des données sur un site https.
Il faut savoir que le lien qui va lancer mon script se trouverra sur le site en question et que pour acceder à ce site il faut s'identifier.
Le lien qui va ouvrir mon script est un lien externe.
Donc il va falloir que je fasse suivre ma session en cour sur le site https à mon script.

Quelle methode me conseillez vous pour recuperer mes données??

J'ai essayé avec curl mais j'ai beaucoup de mal à faire suivre ma session.
Merci d'avance pour votre aide

6 réponses

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
7 mars 2007 à 17:18
Bonjour,

Oui, j'ai déjà eut cette mauvaise expérience... Le même cookie de session est bien envoyé pour http://factice.web et https://factice.web, mais PHP considère deux sessions différentes (certainement car Apache ou autre lui dit qu'il s'agit de deux serveurs différent... donc forcément on ne peut pas être le même) Bref, j'en sais rien... Et j'ai du coup abandonné l'idée d'utiliser le port SSL.

Car, il semble que la seule vraie idée soit de réecrire le gestionnaire de session pour qu'il puisse retrouver les même données d'un port à l'autre. Et là, ça m'a un peu fait... suer!

Si q'un connait le truc ?

A+ 
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
7 mars 2007 à 17:42
Salut!
Tu dois récupérer des données de la session? Ou juste voir si le gars est logé?

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
7 mars 2007 à 20:18
Saell og blesuð

Heu je ne sais si cela peut vous aider mais j ai retrouve cette vieille class sur un hdd Je vous la livre  ainsi :



<?php
/**
 * Http Client Class
 *
 * Uses Pear or Curl for a HTTP/HTTPS GET/POST request
 * (preferred engine: Curl)
 *
 * Handles Cookies & HTTP Auth
 *
 * @author RosSoft
 * @version 0.23
 * @license MIT
 *
 * If you need cookies or HTTP Auth, don't use the
 * function wrappers http_client_get() or http_client_post()
 * Use the class instead. Example:
 * $client=& new HttpClient();
 * $client->user='username'; //the request requires basic http auth
 * $client->password='xxxx';
 * $client->post('http://example.com/login',array('admin'=>'1')); //this will remember the cookie set by that request
 * $client->get('http://example.com/admin/index'); //the cookie is used
 *
 * You can send HTTP Headers with
 * $client->request_headers=array('Content-Type'=>'application/x-www-form-urlencoded; charset=utf-8');
 *
 */

/**
 * Gets the content of an HTTP/HTTPS GET request
 * @param string $url Destination URL
 * @param array $params Associative array of params (don't need to urlencode them)
 * @param string $engine Can be 'Pear','Curl','Auto' ('Auto' selects the best available)
 * @return string The content
 *
 */
function http_client_get($url,$params=array(),$engine='Auto'){
    $client=& new HttpClient($engine);
    return $client->get($url,$params);
}

/**
 * Gets the content of an HTTP/HTTPS POST request
 * @param string $url Destination URL
 * @param array $params Associative array of params (don't need to urlencode them)
 * @param string $engine Can be 'Pear','Curl','Auto' ('Auto' selects the best available)
 * @return string The content
 */
function http_client_post($url,$params=array(),$engine='Auto'){
    $client=& new HttpClient($engine);
    return $client->post($url,$params);
}

/**
 * Gets the content of an HTTP/HTTPS HEAD request
 * @param string $url Destination URL
 * @param array $params Associative array of params (don't need to urlencode them)
 * @param string $engine Can be 'Pear','Curl','Auto' ('Auto' selects the best available)
 * @return string The content
 */
function http_client_head($url,$params=array(),$engine='Auto'){
    $client=& new HttpClient($engine);
    return $client->head($url);
}

/**
 * Main class
 * You can use indirectly through http_client_get
 * or http_client_post wrappers or directly by:
 *
 * $client=HttpClient();
 * $document=$client->get('http://www.google.es/search',array('hl'=>'en', 'q'=>'cakephp'));
 *
 * Is exactly the same as:
 * $client=& new HttpClient();
 * $document=$client->get('http://www.google.es/search?hl=en&q=cakephp'));
 *
 */

class HttpClient extends Object{
    /**
     * @var integer Http Connection timeout in seconds
     */
    var $timeout=30;

    /**
     * @var integer Maximum number of redirections (avoid loops)
     */
    var $max_redirections=10;

    /**
     * @var string Http Basic Auth username
     */
    var $user=null;

    /**
     * @var string Http Basic Auth password
     */
    var $password=null;

    /**
     * @var array HTTP Request Headers to be sent
     */
    var $request_headers=array();

    /**
     * @access protected Instance of HttpClient[Engine]
     * Engines: 'Pear','Curl','Auto'
     * 'Auto' tries Curl, if not loaded then Pear (default)
     */
    var $_engine;

    function HttpClient($engine='Auto'){
        if (!in_array($engine,array('Pear','Curl','Auto'))){
            $message="HttpClient: unknown engine $engine";
            $this->log($message,LOG_ERROR);
            die($message);
        }
        if ($engine=='Auto'){
            if (function_exists('curl_init')){
                $engine='Curl';
            }else{
                $engine='Pear';
            }
        }
        $engine='HttpClient' . $engine;
        $this->_engine=& new $engine($this);
    }

    /**
     * Gets the content of an HTTP/HTTPS GET request
     * @param string $url Destination URL
     * @param array $params Associative array of params (don't need to urlencode them)
     * @return string The content
     */

    function get($url,$params=array()){
        return $this->_engine->get($url,$params);
    }

    /**
     * Gets the content of an HTTP/HTTPS POST request
     * @param string $url Destination URL
     * @param array $params Associative array of params (don't need to urlencode them)
     * @return string The content
     */
    function post($url,$params=array()){
        return $this->_engine->post($url,$params);
    }

    /**
     * Gets the content of an HTTP/HTTPS HEAD request
     * @param string $url Destination URL
     * @param array $params Associative array of params (don't need to urlencode them)
     * @return string The content
     */
    function head($url,$params=array()){
        return $this->_engine->head($url,$params);
    }

    /**
     * Returns information of last response
     * (the content of the array is engine dependant)
     * @return array
     */
    function response(){
        return $this->_engine->response();
    }

    /**
     * Returns the last response http code
     * @return integer
     */
    function response_code(){
        return $this->_engine->response_code();
    }

    /**
     * Returns headers of last response
     * @return array
     */
    function headers(){
        return $this->_engine->headers();
    }

    function _convert_params($params){
          $array= array();
        foreach ($params as $name=>$value)
        {
              $array[] = "$name=".urlencode($value);
        }
        return implode("&", $array);
    }

}

/**
 * Engine Client: Pear
 */
class HttpClientPear extends Object{
    var $_client;
    var $_response;
    var $_parent;

    function __construct($parent){
        $this->_parent=& $parent;

        /*
   
     * vendors/pear/init.php content: <?php
ini_set('include_path',ini_get('include_path').PATH_SEPARATOR .
dirname(__FILE__)); ? >
         */
        vendor('pear/init');
        vendor('pear/HTTP/Client');

        $this->_client = new HTTP_Client();
    }

    function get($url,$params=array()){
        $this->_init();
        $this->_client->get($url, $params);
        return $this->_execute();
    }

    function head($url,$params=array()){
        $this->_init();
        if ($params)
        {
            $url=$url . '?' . $this->_parent->_convert_params($params);
        }
        $this->_client->head($url);
        return $this->_execute();
    }

    function _init(){
        $this->_client->setDefaultHeader($this->_parent->request_headers);
        $this->_client->setMaxRedirects($this->_parent->max_redirections);
        $params=array('timeout'=>$this->_parent->timeout);
        if ($this->_parent->user!==null)
        {
            $params['user']=$this->_parent->user;
            $params['password']=$this->_parent->password;
        }
        $this->_client->setRequestParameter($params);
    }

    function _execute(){
        $this->_response=$this->_client->currentResponse();
        return $this->_response['body'];
    }

    function post($url,$params){
        $this->_client->setDefaultHeader($this->_parent->request_headers);
        $this->_client->post($url, $params);
        return $this->_execute();
    }

    function response(){
        return $this->_response;
    }

    function response_code(){
        return $this->_response['code'];
    }

    function headers(){
        return $this->_response['headers'];
    }

}

/**
 * Engine Client: Curl
 */
define('HTTP_CLIENT_CURL_COOKIES',CACHE . 'http_curl_cookies.txt');
class HttpClientCurl extends Object{
    var $_client;
    var $_response;
    var $_headers;
    var $_body;
    var $_parsing;
    var $_parent;

    function __construct($parent){
        $this->_parent=& $parent;
        file_put_contents(HTTP_CLIENT_CURL_COOKIES,'');

    }

    function get($url,$params){
        $this->_init();
        if (count($params))
        {
            $url=$url . '?' . $this->_parent->_convert_params($params);
        }
        curl_setopt($this->_client, CURLOPT_POST, 0);
        curl_setopt($this->_client, CURLOPT_URL, $url);
        return $this->_execute();
    }

    function post($url,$params){
        $this->_init();
        curl_setopt($this->_client, CURLOPT_POST, 1);
        curl_setopt($this->_client, CURLOPT_POSTFIELDS, $this->_parent->_convert_params($params));
        curl_setopt($this->_client, CURLOPT_URL, $url);
        $result=$this->_execute();
        return $result;
    }

    function head($url,$params){
        if ($params)
        {
            $url=$url . '?' . $this->_parent->_convert_params($params);
        }
        $this->_init();
        curl_setopt($this->_client, CURLOPT_NOBODY, 1);
        curl_setopt($this->_client, CURLOPT_URL, $url);
        $result=$this->_execute();
        return $result;
    }

    function response(){
        return $this->_response;
    }

    function response_code(){
        return $this->_response['http_code'];
    }

    function _execute(){
        $this->_parsing=0; //start
        $this->_headers=array();
        $this->_body='';
        curl_exec($this->_client);
        $this->_response=curl_getinfo($this->_client);
        curl_close($this->_client);
        return $this->_body;
    }

    function _parse_content($ch,$string){
        switch ($this->_parsing){
            case 0: //start. skip http status code
                $this->_parsing=1; //header
                break;
            case 1: //header
                if (strpos($string,':')){
                    $header=split(': ',$string);
                    $key=$header[0];
                    $value=$header[1];
                    while ((strpos($value,"\n")==strlen($value) - 1) || (strpos($value,"\r")==strlen($value) - 1)){
                        $value=substr($value,0,strlen($value) - 1); //remove \n
                    }
                    $this->_headers[$key]=$value;
                    $this->_headers[low($key)]=$value;
                }else{ //end of header
                    $this->_parsing=2;
                }
                break;
            case 2: //body
                $this->_body.=$string;
                break;
        }
        return strlen($string);
    }

    function _init(){
        $this->_client= curl_init();
        if (! $this->_client){
            die('HttpClientCurl: curl_init() fails');
        }
        curl_setopt($this->_client, CURLOPT_HEADER,1);
        curl_setopt($this->_client, CURLOPT_WRITEFUNCTION, array($this,'_parse_content'));
        curl_setopt($this->_client, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($this->_client, CURLOPT_TIMEOUT,$this->_parent->timeout);
        curl_setopt($this->_client, CURLOPT_COOKIEFILE,HTTP_CLIENT_CURL_COOKIES);
        curl_setopt($this->_client, CURLOPT_COOKIEJAR,HTTP_CLIENT_CURL_COOKIES);
        curl_setopt($this->_client, CURLOPT_HTTPHEADER,$this->_parent->request_headers);
        curl_setopt($this->_client, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($this->_client, CURLOPT_MAXREDIRS, $this->_parent->max_redirections);

           if ($this->_parent->user !== null){
               curl_setopt($this->_client, CURLOPT_USERPWD, "{$this->_parent->user}:{$this->_parent->password}");
           }
    }

    function headers(){
        return $this->_headers;
    }
}
?>

En espérant que vous y trouviez votre bonheur ce qui fut le cas pour moi

Vilhjálms
Sigurðsdóttir aka Frëyjá
0
nildv Messages postés 40 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 11 juin 2007
8 mars 2007 à 08:39
Bon ben merci tout le monde
J'vais regarder cette class mais je suis pas trop sur de m'en sortir.
Y a quand meme un truc qui me tue c'est qu'avec mozilla il est possible de voir le contenu d'un cookie.
Comment sa se fait??
Parce que si j'arrivais à copier juste le l'id session j'aurais plus de problemes.
Alors si quelqu'un pouvait me dire par quel moyen miraculeux Mozilla fait ça...
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
9 mars 2007 à 10:04
Salut!
L'id de session tu le récupère avec: session_id( );

Mais tu veux juste reconnecter le gars ou utiliser des données de la session?

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
nildv Messages postés 40 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 11 juin 2007
12 mars 2007 à 08:02
Salut, je voudrais juste faire suivre ma session à mon script.


Merci
0
Rejoignez-nous