利用 cURL 保持 Cookie 會話,完成「POST 登入表單 → 攜帶 Cookie 訪問首頁」完整流程。注意:人人網已停止服務,代碼僅供 cURL 會話管理教學參考。
<?php
$loginUrl = 'https://passport.renren.com/PLogin.do';
$postFields = [
'email' => 'your_email',
'password' => 'your_password',
'origURL' => 'http%3A%2F%2Fhome.renren.com%2FHome.do',
'domain' => 'renren.com',
];
// Cookie 檔案存放於臨時目錄
$cookieFile = tempnam(sys_get_temp_dir(), 'cookie_');
$ch = curl_init($loginUrl);
curl_setopt_array($ch, [
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_MAXREDIRS => 1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_AUTOREFERER => 1,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => http_build_query($postFields),
CURLOPT_COOKIEJAR => $cookieFile, // 登入後寫入 Cookie
]);
curl_exec($ch);
curl_close($ch);
// 攜帶 Cookie 訪問需登入頁面
$homeUrl = 'https://home.renren.com/Home.do';
$ch = curl_init($homeUrl);
curl_setopt_array($ch, [
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_COOKIEFILE => $cookieFile, // 讀取 Cookie
]);
$content = curl_exec($ch);
curl_close($ch);
// 清理暫存 Cookie 檔
unlink($cookieFile);
echo $content; // 輸出首頁 HTML
?>
| 選項 | 作用 |
|---|---|
| CURLOPT_COOKIEJAR | 回應中 Set-Cookie 寫入此檔案(登入階段) |
| CURLOPT_COOKIEFILE | 請求時讀取此檔案發送 Cookie(後續訪問) |
| CURLOPT_FOLLOWLOCATION | 自動追蹤 301/302 重定向 |
| CURLOPT_AUTOREFERER | 重定向時自動補上 Referer |
| CURLOPT_POSTFIELDS | 配合 CURLOPT_POST=1 發送 application/x-www-form-urlencoded |
| http_build_query() | 將陣列安全編碼為 URL 參數字串 |
// Guzzle 7 範例 $client = new \GuzzleHttp\Client(['cookies' => new \GuzzleHttp\Cookie\FileCookieJar($cookieFile)]); $client->post($loginUrl, ['form_params' => $postFields]); $resp = $client->get($homeUrl); echo $resp->getBody();
robots.txt 與服務條款,避免濫用。CURLOPT_SSL_VERIFYPEER (生產環境建議設為 true 並配置 CA 憑證)。