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

PHP cURL 模擬登錄卡在登錄頁面?Cookie 處理與重定向排查全攻略

     編輯:程式設計綜合問答

問題現象

代碼成功獲取並保存 Cookie,但第二次請求個人中心頁面時仍停留在登錄頁,無法跳轉至目標頁面。

核心排查方向

  1. 重定向處理:登錄請求可能返回 301/302 跳轉,需確認 CURLOPT_FOLLOWLOCATION 生效,且 Cookie 在跳轉鏈中正確傳遞。
  2. Cookie 域/路徑匹配:檢查 CURLOPT_COOKIEJAR/FILE 保存的 Cookie 域名、路徑、Secure/HttpOnly 標誌是否與後續請求匹配。
  3. 隱藏表單字段:登錄頁可能包含 CSRF token、時間戳等動態字段,需先 GET 登錄頁解析再 POST。
  4. User-Agent 與 Header:部分站點檢測 UA、Referer、Origin,需模擬真實瀏覽器完整 Header。
  5. HTTPS 證書驗證:若站點強制 HTTPS,需設置 CURLOPT_SSL_VERIFYPEER 與 CURLOPT_CAINFO。

調試利器:Fiddler / Charles

抓包對比瀏覽器與 cURL 的完整請求/響應差異:請求行、Header、Body、Cookie、重定向鏈。重點觀察 Set-Cookie 與後續 Cookie 是否一致。

修正代碼要點

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL            => 'https://www.imooc.com/user/newlogin',
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => http_build_query(['email'=>'...','password'=>'...','autologin'=>0]),
    CURLOPT_COOKIEJAR      => __DIR__.'/cookies.txt',
    CURLOPT_COOKIEFILE     => __DIR__.'/cookies.txt',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_MAXREDIRS      => 5,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_CAINFO         => __DIR__.'/cacert.pem', // 需下載 cacert.pem
    CURLOPT_USERAGENT      => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...',
    CURLOPT_REFERER        => 'https://www.imooc.com/user/newlogin',
]);
$resp = curl_exec($ch);
// 檢查響應碼、重定向後最終 URL
$info = curl_getinfo($ch);
echo "HTTP Code: {$info['http_code']}\nEffective URL: {$info['url']}\n";
// 再次請求受保護頁面
curl_setopt($ch, CURLOPT_URL, 'https://www.imooc.com/space/index');
curl_setopt($ch, CURLOPT_POST, false);
$page = curl_exec($ch);
curl_close($ch);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved