Maison > développement back-end > tutoriel php > Comment se connecter à des sites Web avec des certificats SSL et des cookies à l'aide de Curl ?

Comment se connecter à des sites Web avec des certificats SSL et des cookies à l'aide de Curl ?

Linda Hamilton
Libérer: 2024-11-12 13:02:02
original
509 Les gens l'ont consulté

How to Log in to Websites with SSL Certificates and Cookies Using Curl?

Comment gérer les certificats SSL et les cookies pour les connexions avec Curl

Problème

La connexion à un site Web comme barnesandnoble.com à l'aide de cURL peut être difficile, surtout lorsqu'il s'agit de certificats SSL et cookies.

Solution

Obtention des champs de formulaire :

  • Utilisez la fonction getFormFields() pour extraire les champs masqués du formulaire de saisie requis pour la connexion.

Construction POST Chaîne :

  • Paramètres d'encodage d'URL dans la chaîne POST (cURL ne le fait pas automatiquement).
  • Utilisez http_build_query() pour créer la chaîne POST à ​​partir des champs du formulaire.

Gestion du SSL Certificats :

  • Définissez CURLOPT_SSL_VERIFYHOST sur 0.
  • Définissez CURLOPT_SSL_VERIFYPEER sur false.

Gestion des cookies :

  • Utiliser CURLOPT_COOKIEFILE et CURLOPT_COOKIEJAR pour gérer les cookies.

Exemple de code :

L'extrait de code suivant illustre un script de connexion réussi :

<?php
// Options
$EMAIL = '[email&#160;protected]';
$PASSWORD = 'yourpassword';
$cookie_file_path = "/tmp/cookies.txt";
$LOGINURL = "https://cart2.barnesandnoble.com/mobileacct/op.asp?stage=signIn";
$agent = "Nokia-Communicator-WWW-Browser/2.0 (Geos 3.0 Nokia-9000i)";

// Begin Script
$ch = curl_init();

// Headers
$headers[] = "Accept: */*";
$headers[] = "Connection: Keep-Alive";

// Basic cURL Options
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);

// Get Form Fields
curl_setopt($ch, CURLOPT_URL, $LOGINURL);
$content = curl_exec($ch);
$fields = getFormFields($content);
$fields['emailAddress'] = $EMAIL;
$fields['acctPassword'] = $PASSWORD;

// Get x Value
$x = '';
preg_match('/op\.asp\?x=(\d+)/i', $content, $match);
if (isset($match[1])) {
    $x = $match[1];
}

// Build POST String
$POSTFIELDS = http_build_query($fields);

// Change URL to Login URL
curl_setopt($ch, CURLOPT_URL, "https://cart2.barnesandnoble.com/mobileacct/op.asp?x=$x");

// Set POST Options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS);

// Perform Login
$result = curl_exec($ch);

print $result;

function getFormFields($data) {
    preg_match('/(<form action="op.*?<\/form>)/is', $data, $matches);
    if (isset($matches[1])) {
        return getInputs($matches[1]);
    } else {
        die('didnt find login form');
    }
}

function getInputs($form) {
    $inputs = array();
    preg_match_all('/(<input[^>]+>)/is', $form, $matches);
    foreach ($matches[1] as $el) {
        $el = preg_replace('/\s{2,}/', ' ', $el);
        preg_match('/name=(?:["\'])?([^"\'\s]*)/i', $el, $name);
        if (isset($name[1])) {
            $name = $name[1];
            $value = '';
            preg_match('/value=(?:["\'])?([^"\'\s]*)/i', $el, $value);
            if (isset($value[1])) {
                $value = $value[1];
            }
            $inputs[$name] = $value;
        }
    }
    return $inputs;
}
Copier après la connexion

Supplémentaire Notes :

  • Une fois les cookies établis, vous pouvez créer un nouvel objet cURL et spécifier le COOKIEFILE et le COOKIEJAR pour rester connecté.
  • Curl peut également être utilisé pour plusieurs actions et envoi de XML avec en-têtes.
  • Pour plus d'informations et de dépannage, reportez-vous au fichier externe fourni. ressources.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal