Maison >développement back-end >tutoriel php >Pourquoi est-il difficile de se connecter au site mobile de Barnes & Noble en utilisant Curl, SSL et les cookies ?

Pourquoi est-il difficile de se connecter au site mobile de Barnes & Noble en utilisant Curl, SSL et les cookies ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-09 13:43:02922parcourir

Why is it difficult to log in to Barnes & Noble's mobile site using Curl, SSL, and cookies?

Comment se connecter avec Curl, SSL et cookies

Lorsque vous essayez de vous connecter à barnesandnoble.com en utilisant Curl, SSL et cookies , certains utilisateurs rencontrent des difficultés en raison de différences dans les protocoles des sites Web et de problèmes potentiels de gestion des cookies. Voici une description du problème et une solution :

Problème :

  • Les utilisateurs ne peuvent pas se connecter au site mobile de barnesandnoble.com à l'aide de Curl.
  • La page renvoyée n'affiche aucune erreur et le champ e-mail est par défaut la zone de saisie de l'e-mail du formulaire de connexion.
  • Le même code se connecte avec succès à eBay, indiquant que le problème réside dans les caractéristiques uniques du site Web Barnesandnobles.

Solution :

Pour réussir à vous connecter à barnesandnoble.com à l'aide de Curl, considérez les éléments suivants :

  • Encodage d'URL : Assurez-vous que les paramètres d'URL (tels que l'e-mail et le mot de passe) dans la chaîne de publication sont correctement codés en URL.
  • Valeur x : Incluez la valeur x dans l'URL de connexion . Cette valeur est généralement extraite de la réponse initiale.

Voici un exemple de script qui intègre ces solutions :

// Options
$EMAIL = '[email 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();

// Extra 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);

// Initial URL
curl_setopt($ch, CURLOPT_URL, $LOGINURL);

// Get Cookies and Form Inputs
$content = curl_exec($ch);

// Extract Hidden Inputs
$fields = getFormFields($content);
$fields['emailAddress'] = $EMAIL;
$fields['acctPassword'] = $PASSWORD;

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

// Updated Login URL
$LOGINURL = "https://cart2.barnesandnoble.com/mobileacct/op.asp?x=$x";

// Post Options
curl_setopt($ch, CURLOPT_URL, $LOGINURL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));

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

print $result;

// Helper Function to Extract Form Inputs
function getFormFields($data)
{
    $inputs = array();

    $elements = preg_match_all('/(<input[^>]+>)/is', $data, $matches);

    if ($elements > 0) {
        for ($i = 0; $i < $elements; $i++) {
            $el = preg_replace('/\s{2,}/', ' ', $matches[1][$i]);

            if (preg_match('/name=(?:["\'])?([^"\'\s]*)/i', $el, $name)) {
                $name = $name[1];
                $value = '';

                if (preg_match('/value=(?:["\'])?([^"\'\s]*)/i', $el, $value)) {
                    $value = $value[1];
                }

                $inputs[$name] = $value;
            }
        }
    }

    return $inputs;
}

N'oubliez pas de modifier les variables $EMAIL et $PASSWORD avec votre valeur réelle. identifiants de connexion. De plus, $cookie_file_path doit pointer vers un emplacement accessible en écriture sur le système de fichiers.

Une fois connecté, vous pouvez créer un nouvel objet Curl, en spécifiant les options COOKIEFILE et COOKIEJAR, et vous resterez authentifié sans effectuer les premières étapes.

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