人人網(已停止服務)曾是國內主流社交平台,本文以其為例示範 PHP 如何透過 cURL 模擬瀏覽器完成「登入 → 取得 Token → 發布動態」完整流程。核心技術可移植至其他需模擬登入的站點。
<?php
// === 設定區 ===
$username = 'your_email@example.com';
$password = 'your_password';
$cookieFile = sys_get_temp_dir() . '/renren_cookie_' . md5($username) . '.txt';
$postContent = '這是用 PHP 發布的測試動態 ' . date('Y-m-d H:i:s');
// === 1. 登入取得 Cookie ===
$loginUrl = 'https://passport.renren.com/PLogin.do';
$loginFields = [
'email' => $username,
'password' => $password,
'origURL' => 'https://home.renren.com/Home.do',
'domain' => 'renren.com',
];
$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_FOLLOWLOCATION => 1,
CURLOPT_AUTOREFERER => 1,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $loginFields,
CURLOPT_COOKIEJAR => $cookieFile, // 儲存 Cookie
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
]);
$loginResult = curl_exec($ch);
curl_close($ch);
// 簡易判斷登入是否成功(實際需分析回應內容或重導向 URL)
if (strpos($loginResult, '登入失敗關鍵字') !== false) {
die('登入失敗,請檢查帳密或驗證碼機制');
}
// === 2. 進入首頁攜帶 Cookie 取得發文所需 Token ===
$homeUrl = 'https://www.renren.com/home';
$ch = curl_init($homeUrl);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_COOKIEFILE => $cookieFile, // 讀取 Cookie
CURLOPT_SSL_VERIFYPEER => false,
]);
$homeHtml = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
// 從重導向 URL 或頁面內容解析 token、rtk、uid
// 實際選擇器需依當時頁面結構調整
preg_match("/get_check:'([^']+)'/", $homeHtml, $mToken);
preg_match("/get_check_x:'([^']+)'/", $homeHtml, $mRtk);
preg_match("/'ruid':'([^']+)'/", $homeHtml, $mUid);
$token = $mToken[1] ?? '';
$rtk = $mRtk[1] ?? '';
$uid = $mUid[1] ?? '';
if (!$token || !$rtk || !$uid) {
die('無法解析發文參數,請更新正則或檢查登入狀態');
}
// === 3. 發布動態 ===
$postUrl = "https://shell.renren.com/{$uid}/status";
$postFields = [
'content' => $postContent,
'withInfo' => '{"wpath":[]}',
'hostid' => $uid,
'privacyParams' => '{"sourceControl": 99}',
'requestToken' => $token,
'_rtk' => $rtk,
'channel' => 'renren',
];
$headers = [
'Referer: https://shell.renren.com/ajaxproxy.htm',
'X-Requested-With: XMLHttpRequest',
];
$ch = curl_init($postUrl);
curl_setopt_array($ch, [
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $postFields,
CURLOPT_COOKIEFILE => $cookieFile,
CURLOPT_SSL_VERIFYPEER => false,
]);
$postResult = curl_exec($ch);
curl_close($ch);
$response = json_decode($postResult, true);
if (($response['code'] ?? '') === '0') {
echo "發布成功!\n";
} else {
echo "發布失敗: " . json_encode($response, JSON_UNESCAPED_UNICODE) . "\n";
}
// === 清理 ===
@unlink($cookieFile);
?>
CURLOPT_COOKIEJAR 寫入、CURLOPT_COOKIEFILE 讀取,實現會話保持。false,生產環境請配置有效 CA 憑證。模擬登入屬於灰色地帶,請嚴格遵守目標網站 robots.txt、服務條款與當地法規。僅供技術研究、自動化測試、個人資料備份等合法用途,嚴禁用於大規模爬蟲、垃圾訊息發送、帳號盜用等違法行為。