Logging into a website like barnesandnoble.com using cURL can be challenging, especially when dealing with SSL certificates and cookies.
Obtaining Form Fields:
Building POST String:
Managing SSL Certificates:
Managing Cookies:
Example Code:
The following code snippet demonstrates a successful login script:
<?php // 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(); // 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; }
Additional Notes:
The above is the detailed content of How to Log in to Websites with SSL Certificates and Cookies Using Curl?. For more information, please follow other related articles on the PHP Chinese website!