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
Linda Hamiltonoriginal
2024-11-12 13:02:02537parcourir

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;
}

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!

Déclaration:
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