4 votes

Se connecter au site https en utilisant curl

Je suis en train d'essayer de me connecter à un site. Ce site utilise la soumission automatique du formulaire et une clé aléatoire pour soumettre le formulaire. J'ai essayé plusieurs façons mais je n'ai pas réussi. Voici donc mes codes. Toute réponse sera appréciée. Merci d'avance. De plus, mon nom d'utilisateur et mon mot de passe de compte fictif sont disponibles dans le code pour ceux qui veulent essayer. Mon URL est un peu longue

include 'simple_html_dom.php';
$i = 0;
$html = file_get_html($url);
foreach($html->find('input') as $keys) {
    $ltkey = $keys->value;
    if (++ $i == 1)
        break;
}
$url = 'https://auth.station.sony.com/login?theme=poxnora&cid=1056360&service=https://poxnora.station.sony.com/cas/merge.do®Service=https://poxnora.station.sony.com /play/load.do';
$data = 'lt=' . $ltkey . '&_eventId=submit&username=XXXXXXXX&password=XXXXXXXX';

// requête curl
$fp = fopen("cookie.txt", "w");
fclose($fp);
$login = curl_init();
curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($login, CURLOPT_TIMEOUT, 40000);
curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($login, CURLOPT_URL, $url);
curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($login, CURLOPT_POST, TRUE);
curl_setopt($login, CURLOPT_POSTFIELDS, $data);
curl_setopt($login, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($login, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($login, CURLOPT_CAINFO, "cert.crt");
$result = curl_exec($login);
curl_close($login);

echo $result;

3voto

chrislondon Points 5751

Le problème est que la clé de formulaire est connectée à une session. Vous devez donc utiliser votre fichier cookie lorsque vous récupérez la clé de formulaire. Voici comment je ferais :

getCookieFile();
    }

    // Crée un nouveau fichier cookie dans le répertoire temporaire du système
    protected function getCookieFile() {
        $this->cookieFile = tempnam(sys_get_temp_dir(), 'CDL');
    }

    // Obtient la clé de formulaire de la page de connexion
    protected function getFormKey() {
        $ch = curl_init();
        $this->setCurlOpts($ch);
        $result = curl_exec($ch);
        curl_close($ch);

        $key = $this->matchFormKey($result);

        if (!$key) {
            throw new Exception('Impossible de récupérer la clé du formulaire');
        }

        return $key;
    }

    protected function matchFormKey($result) {
        preg_match_all('', $result, $matches);

        return isset($matches[1][0]) ? $matches[1][0] : false;
    }

    // Utilise le nom d'utilisateur, le mot de passe et la clé de formulaire pour se connecter
    public function login($username, $password) {
        $key = $this->getFormKey();

        $ch = curl_init();
        $this->setCurlOpts($ch);

        $data = "lt=$key&_eventId=submit&username=$username&password=$password";
        $this->setCurlPost($ch, $data);

        $result = curl_exec($ch);
        curl_close($ch);

        // vérifie s'il y a une clé de formulaire. S'il y a une clé de formulaire alors nous sommes de nouveau sur
        // la page de connexion
        $key = $this->matchFormKey($result);

        return !$key;
    }

    // Ajoute des données post à curl
    protected function setCurlPost($ch, $postData) {
        curl_setopt($ch, CURLOPT_POST,       true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    }

    // Ajoute les paramètres curl par défaut
    protected function setCurlOpts($ch) {
        curl_setopt($ch, CURLOPT_COOKIEJAR,      $this->cookieFile);
        curl_setopt($ch, CURLOPT_COOKIEFILE,     $this->cookieFile);
        curl_setopt($ch, CURLOPT_TIMEOUT,        40000);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL,            self::URL);
        curl_setopt($ch, CURLOPT_USERAGENT,      $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_REFERER,        self::URL);
    }
}

$api = new PoxnoraAPI();
$isLoggedIn = $api->login('NOM_UTILISATEUR_ICI', 'MOT_DE_PASSE_ICI');

if ($isLoggedIn) {
    echo 'Connexion réussie !';
} else {
    echo 'Erreur de connexion';
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X