>백엔드 개발 >PHP 튜토리얼 >Curl, SSL, 쿠키를 사용하여 Barnes & Noble의 모바일 사이트에 로그인하는 것이 왜 어려운가요?

Curl, SSL, 쿠키를 사용하여 Barnes & Noble의 모바일 사이트에 로그인하는 것이 왜 어려운가요?

Susan Sarandon
Susan Sarandon원래의
2024-11-09 13:43:02931검색

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

Curl, SSL 및 쿠키를 사용하여 로그인하는 방법

Curl, SSL 및 쿠키를 사용하여 barnesandnoble.com에 로그인하려고 할 때 , 일부 사용자는 웹사이트 프로토콜의 차이와 잠재적인 쿠키 처리 문제로 인해 어려움을 겪고 있습니다. 다음은 문제 분석 및 해결 방법입니다.

문제:

  • 사용자가 Curl을 사용하여 barnesandnoble.com의 모바일 사이트에 로그인할 수 없습니다.
  • 반환된 페이지에는 오류가 표시되지 않으며 이메일 필드는 기본적으로 로그인 양식의 이메일 입력 상자로 설정됩니다.
  • 동일한 코드가 eBay에 성공적으로 로그인하여 문제가 barnesandnobles 웹사이트의 고유한 특성에 있음을 나타냅니다.

해결책:

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, 쿠키를 사용하여 Barnes & Noble의 모바일 사이트에 로그인하는 것이 왜 어려운가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.