首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP cURL 模擬登錄帶驗證碼網站:人工介入驗證碼識別方案

     編輯:PHP 綜合知識

針對帶有驗證碼的網站進行模擬登錄,全自動識別驗證碼(OCR)準確率難以保證。本文提供一種半自動化方案:程式取得驗證碼圖片 → 暫停等待人工輸入 → 續行登錄,兼顧自動化效率與識別準確度。

核心流程

  1. 初始化 cURL,取得登錄頁 Cookie
  2. 請求驗證碼圖片 URL,儲存為本地檔案(verifyCode.jpg)
  3. sleep(20) 暫停 20 秒,供人工查看圖片並將驗證碼寫入 code.txt
  4. 讀取 code.txt 內容作為驗證碼參數
  5. 攜帶 Cookie 與驗證碼 POST 登錄表單
  6. 判斷回應內容確認登錄結果

完整程式碼實作

<?php
/** 模擬登錄主流程 */
$cookie_file = "tmp.cookie";
$login_url   = "https://xxx.com/logon.php";
$verify_url  = "https://xxx.com/verifyCode.php";

echo "正在獲取 Cookie...\n";
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL            => $login_url,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_COOKIEJAR      => $cookie_file, // 儲存 Cookie
]);
curl_exec($ch);
curl_close($ch);

echo "正在取得驗證碼圖片...\n";
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL       => $verify_url,
    CURLOPT_COOKIEFILE => $cookie_file, // 攜帶 Cookie
    CURLOPT_HEADER     => 0,
    CURLOPT_RETURNTRANSFER => 1,
]);
$img = curl_exec($ch);
curl_close($ch);

file_put_contents("verifyCode.jpg", $img);
echo "驗證碼已儲存,請於 20 秒內查看圖片並將驗證碼寫入 code.txt\n";
sleep(20);

$code = trim(file_get_contents("code.txt"));
echo "讀取驗證碼:$code\n";

echo "正在嘗試登錄...\n";
$post = "username=maben&pwd=hahahaha&verifycode=$code";
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL            => $login_url,
    CURLOPT_HEADER         => false,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $post,
    CURLOPT_COOKIEFILE     => $cookie_file,
]);
$result = curl_exec($ch);
curl_close($ch);

// 根據實際回應調整判斷邏輯
if (strpos($result, "登錄成功") !== false) {
    echo "登錄成功!\n";
    // 後續業務邏輯...
} else {
    echo "登錄失敗\n";
    exit;
}
?>

關鍵技術點

設定項作用
CURLOPT_COOKIEJAR首次請求儲存 Cookie 到檔案
CURLOPT_COOKIEFILE後續請求讀取 Cookie 檔案,維持 Session
CURLOPT_RETURNTRANSFER將回應作為字串返回而非直接輸出
sleep(20)阻塞腳本,提供人工介入時間窗口

生產環境改進建議

  • Web 介面替代檔案:建立簡易後台頁面顯示驗證碼圖片並提交識別結果,避免手動編輯文字檔
  • 非阻塞輪詢:使用 AJAX 輪詢狀態,而非 sleep() 阻塞 PHP 進程
  • 驗證碼識別服務:對接第三方打碼平台(超級鷹、雲打碼等)實現全自動化
  • Session 管理:將 Cookie 檔案改為資料庫/Redis 儲存,支援分散式部署

此方案適用於一次性資料遷移、測試腳本、低頻爬蟲等場景;高頻業務請採用全自動識別或官方 API。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved