使用cURL 登入像barnesandnoble.com 這樣的網站可能具有挑戰性,特別是在處理SSL 憑證時cookies.
取得表單欄位:
建築郵政字串:
管理 SSL憑證:
管理Cookies:
示例代碼:
以下代碼片段顯示登錄成功腳本:
<?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; }
附加說明:
以上是如何使用Curl登入帶有SSL憑證和Cookie的網站?的詳細內容。更多資訊請關注PHP中文網其他相關文章!