新浪微博登入機制複雜,主站登入採用多重加密(sha1(sha1(sha1(pwd)).once.servertime)),直接破解極難。但發現新浪旗下 login.sina.com.cn 統一登入介面密碼以明文傳輸,且登入後可同步取得微博站點 Cookie,構成「側通道」突破口。
https://login.sina.com.cn/sso/login.php 發送明文帳密完成登入。crossDomainUrlList(含微博域 Cookie 種植連結)。weibo.com 即為登入狀態。<?php
// === 設定 ===
$username = 'your_weibo_account';
$password = 'your_password';
$cookieFile = sys_get_temp_dir() . '/weibo_cookie_' . md5($username) . '.txt';
/**
* 通用 cURL POST 封裝
*/
function curlPost($url, array $data, $cookieFile) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_COOKIEJAR => $cookieFile,
CURLOPT_COOKIEFILE => $cookieFile,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
]);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
/**
* 通用 cURL GET 封裝
*/
function curlGet($url, $cookieFile) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_COOKIEFILE => $cookieFile,
CURLOPT_COOKIEJAR => $cookieFile,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
]);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
// === 1. 統一登入入口 ===
$loginUrl = 'https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)';
$loginData = [
'entry' => 'sso',
'gateway' => '1',
'from' => 'null',
'savestate' => '30',
'useticket' => '0',
'pagerefer' => '',
'vsnf' => '1',
'su' => base64_encode($username), // 使用者名 Base64
'service' => 'sso',
'sp' => $password, // 明文密碼
'sr' => '1920*1080',
'encoding' => 'UTF-8',
'cdult' => '3',
'domain' => 'sina.com.cn',
'prelt' => '0',
'returntype' => 'TEXT',
];
$loginResp = curlPost($loginUrl, $loginData, $cookieFile);
$loginJson = json_decode($loginResp, true);
if (($loginJson['retcode'] ?? '') !== '0') {
die('登入失敗: ' . json_encode($loginJson, JSON_UNESCAPED_UNICODE));
}
echo "登入成功,UID: {$loginJson['uid']}, 暱稱: {$loginJson['nick']}\n";
// === 2. 跨域 Cookie 同步(關鍵步驟)===
foreach ($loginJson['crossDomainUrlList'] as $crossUrl) {
curlGet($crossUrl, $cookieFile);
usleep(200000); // 稍作延遲,確保 Cookie 寫入
}
// === 3. 訪問微博首頁確認登入態 ===
$homeHtml = curlGet('https://weibo.com', $cookieFile);
// 此時 $homeHtml 應包含登入後的個人化內容
// === 4. 發布微博(需解析頁面中的 form token、_rtk 等)===
// 實際發文介面參數較複雜,建議改用官方 OpenAPI (OAuth2) 方式
// 此處僅示範登入流程核心
echo "登入流程完成,Cookie 已儲存至: $cookieFile\n";
?>
base64_encode,非 URL 編碼。.weibo.com、.sina.com.cn 等域下種植 Cookie,否則後續請求仍為未登入狀態。CURLOPT_COOKIEFILE 即可跳過登入步驟,直到 Cookie 過期。新浪微博提供完整的 OAuth2 開放平台,支援授權碼模式、Access Token 管理、介面限流保護。**強烈建議正式專案使用官方 API**,避免模擬登入的脆弱性、法律風險與維護成本。
本文展示的「統一登入入口 + 跨域 Cookie 同步」技巧,不僅適用於新浪微博,同理可推廣至其他擁有統一認證中心(SSO)的大型網站群(如 Google、Microsoft、阿里系)。掌握此模式,能在無官方 API 或 API 受限時,快速實現自動化登入與資料存取。