代碼成功獲取並保存 Cookie,但第二次請求個人中心頁面時仍停留在登錄頁,無法跳轉至目標頁面。
CURLOPT_FOLLOWLOCATION 生效,且 Cookie 在跳轉鏈中正確傳遞。CURLOPT_COOKIEJAR/FILE 保存的 Cookie 域名、路徑、Secure/HttpOnly 標誌是否與後續請求匹配。CURLOPT_SSL_VERIFYPEER 與 CURLOPT_CAINFO。抓包對比瀏覽器與 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);