>  기사  >  백엔드 개발  >  Curl을 사용하여 SSL 인증서 및 쿠키가 있는 웹사이트에 로그인하는 방법은 무엇입니까?

Curl을 사용하여 SSL 인증서 및 쿠키가 있는 웹사이트에 로그인하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-12 13:02:02461검색

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

Curl을 사용하여 로그인에 대한 SSL 인증서 및 쿠키를 처리하는 방법

문제

cURL을 사용하여 barnesandnoble.com과 같은 웹사이트에 로그인하는 것은 어려울 수 있습니다. 특히 SSL 인증서와 쿠키를 다룰 때.

해결책

양식 필드 얻기:

  • getFormFields() 함수를 사용하여 숨겨진 추출 로그인에 필요한 입력 양식 필드.

POST 문자열 작성:

  • POST 문자열의 URL 인코딩 매개변수(cURL은 이 작업을 자동으로 수행하지 않음) ).
  • http_build_query()를 사용하여 양식 필드에서 POST 문자열을 생성합니다.

SSL 인증서 관리:

  • 설정 CURLOPT_SSL_VERIFYHOST를 0으로 설정합니다.
  • CURLOPT_SSL_VERIFYPEER를 false로 설정합니다.

쿠키 관리:

  • CURLOPT_COOKIEFILE 및 CURLOPT_COOKIEJAR를 사용하여 쿠키를 처리합니다. .

예제 코드:

다음 코드 조각은 성공적인 로그인 스크립트를 보여줍니다.

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

추가 참고 사항:

  • 쿠키가 설정되면 새 cURL 객체를 생성하고 COOKIEFILE 및 COOKIEJAR를 지정하여 로그인 상태를 유지할 수 있습니다.
  • Curl은 여러 작업 및 전송에도 사용할 수 있습니다. 헤더가 포함된 XML.
  • 자세한 내용과 문제 해결은 제공된 외부 리소스를 참조하세요.

위 내용은 Curl을 사용하여 SSL 인증서 및 쿠키가 있는 웹사이트에 로그인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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