Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Log masuk ke Laman Web dengan Sijil SSL dan Kuki Menggunakan Curl?

Bagaimana untuk Log masuk ke Laman Web dengan Sijil SSL dan Kuki Menggunakan Curl?

Linda Hamilton
Linda Hamiltonasal
2024-11-12 13:02:02459semak imbas

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

Cara Mengendalikan Sijil SSL dan Kuki untuk Log Masuk dengan Curl

Masalah

Melog masuk ke tapak web seperti barnesandnoble.com menggunakan cURL boleh mencabar, terutamanya apabila berurusan dengan sijil SSL dan kuki.

Penyelesaian

Mendapatkan Medan Borang:

  • Gunakan fungsi getFormFields() untuk mengekstrak medan borang input tersembunyi yang diperlukan untuk log masuk.

Membina POST Rentetan:

  • Parameter pengekodan URL dalam rentetan POST (cURL tidak melakukan ini secara automatik).
  • Gunakan http_build_query() untuk mencipta rentetan POST daripada medan borang.

Mengurus SSL Sijil:

  • Tetapkan CURLOPT_SSL_VERIFYHOST kepada 0.
  • Tetapkan CURLOPT_SSL_VERIFYPEER kepada palsu.

Mengurus Kuki:

  • Gunakan CURLOPT_COOKIEFILE dan CURLOPT_COOKIEJAR untuk mengendalikan kuki.

Kod Contoh:

Kod haiwan peliharaan berikut menunjukkan log masuk yang berjaya skrip:

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

Nota Tambahan:

  • Setelah kuki diwujudkan, anda boleh mencipta objek cURL baharu dan tentukan COOKIEFILE dan COOKIEJAR untuk kekal dilog masuk.
  • Curl juga boleh digunakan untuk berbilang tindakan dan menghantar XML dengan pengepala.
  • Untuk mendapatkan maklumat lanjut dan penyelesaian masalah, rujuk sumber luaran yang disediakan.

Atas ialah kandungan terperinci Bagaimana untuk Log masuk ke Laman Web dengan Sijil SSL dan Kuki Menggunakan Curl?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn