ホームページ > バックエンド開発 > PHPチュートリアル > Curl、SSL、Cookie を使用して Barnes & Noble のモバイル サイトにログインするのが難しいのはなぜですか?

Curl、SSL、Cookie を使用して Barnes & Noble のモバイル サイトにログインするのが難しいのはなぜですか?

Susan Sarandon
リリース: 2024-11-09 13:43:02
オリジナル
918 人が閲覧しました

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

Curl、SSL、Cookie を使用してログインする方法

Curl、SSL、Cookie を使用して barnesandnoble.com にログインしようとする場合、Web サイトのプロトコルの違いや Cookie の処理に関する潜在的な問題により、一部のユーザーが問題に遭遇することがあります。問題の内訳と解決策は次のとおりです:

問題:

  • ユーザーは Curl を使用して barnesandnoble.com のモバイル サイトにログインできません。
  • 返されたページにはエラーは表示されず、電子メールフィールドはログインフォームの電子メール入力にデフォルト設定されます。ボックス。
  • 同じコードが eBay に正常にログインします。これは、問題が barnesandnobles Web サイトの独自の特性にあることを示しています。

解決策:

Curl を使用して barnesandnoble.com に正常にログインするには、次の点を考慮してください。以下:

  • URL エンコーディング: 投稿文字列内の URL パラメーター (電子メールやパスワードなど) が適切に URL エンコードされていることを確認します。
  • x 値: ログイン URL の一部として x 値を含めます。この値は通常、初期応答から抽出されます。

これらのソリューションを組み込んだスクリプトの例を次に示します。

// 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;
}
ログイン後にコピー

$EMAIL 変数と $PASSWORD 変数を実際の値で変更することを忘れないでください。ログイン認証情報。さらに、$cookie_file_path は、ファイル システム上の書き込み可能な場所を指す必要があります。

ログインしたら、COOKIEFILE および COOKIEJAR オプションを指定して新しい Curl オブジェクトを作成できます。これにより、次の操作を行わずに認証されたままになります。最初のステップ。

以上がCurl、SSL、Cookie を使用して Barnes & Noble のモバイル サイトにログインするのが難しいのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート