首頁 >後端開發 >php教程 >如何使用Curl登入帶有SSL憑證和Cookie的網站?

如何使用Curl登入帶有SSL憑證和Cookie的網站?

Linda Hamilton
Linda Hamilton原創
2024-11-12 13:02:02537瀏覽

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

如何使用Curl 處理用於登入的SSL 憑證和Cookie

問題

使用cURL 登入像barnesandnoble.com 這樣的網站可能具有挑戰性,特別是在處理SSL 憑證時cookies.

解決方案

取得表單欄位:

  • 使用getFormFieliel() 函數擷取登入所需的隱藏輸入表單欄位。

建築郵政字串:

  • 對 POST 字串中的參數進行 URL 編碼(cURL 不會自動執行此操作)。
  • 使用 http_build_query() 從表單欄位建立 POST 字串。

管理 SSL憑證:

  • 將 CURLOPT_SSL_VERIFYHOST 設定為 0。
  • 將 CURLOPT_SSL_VERIFYPEER 設為 false。

管理Cookies:

  • 使用 CURLOPT_COOKIEFILE 和 CURLOPT_COOKIEJAR 來處理 Cookie。

示例代碼:

以下代碼片段顯示登錄成功腳本:

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

附加說明:

  • 一旦建立cookie,您可以建立一個新的cURL物件並指定COOKIEFILE和COOKIEJAR以保持記錄in.
  • Curl 也可以用於多個操作並發送XML標頭。
  • 有關更多資訊和故障排除,請參閱提供的外部資源。

以上是如何使用Curl登入帶有SSL憑證和Cookie的網站?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn