将百家号的 Cookie 验证从浏览器检查改为 API 接口检查,提高验证的准确性和效率。
接口地址:https://baijiahao.baidu.com/builder/app/appinfo
请求方法:GET
请求头:
Cookie: <账号的 Cookie 字符串>
Referer: https://baijiahao.baidu.com/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...
{
"errno": 0,
"errmsg": "success",
"data": {
"user": {
"app_id": 1833101008440434,
"name": "三千痴缠坠花湮",
"userid": 441651849,
"status": "audit",
"avatar": "//pic.rmb.bdstatic.com/...",
...
}
}
}
{
"errno": 110,
"errmsg": "未登录",
"data": null
}
Cookie 被认为有效,需要同时满足以下条件:
data.user.name 或 data.user.app_id 存在data.user.status 为 audit、pass、active 或不存在以下情况表示 Cookie 无效:
errno 非 0:
errno: 110 - 未登录errno 为 0 但没有用户信息:
data.user 为空用户状态异常:
status: 'banned' - 账号被封禁server/src/services/HeadlessBrowserService.ts)baijiahao: {
checkUrl: 'https://baijiahao.baidu.com/builder/app/appinfo',
isValidResponse: (data: unknown) => {
const resp = data as {
errno?: number;
errmsg?: string;
data?: {
user?: {
name?: string;
app_id?: string | number;
status?: string;
}
}
};
// errno 为 0 表示请求成功
const isErrnoOk = resp?.errno === 0;
// 必须有用户信息
const hasUserInfo = !!(resp?.data?.user?.name || resp?.data?.user?.app_id);
// 用户状态正常
const userStatus = resp?.data?.user?.status;
const isStatusOk = !userStatus ||
userStatus === 'audit' ||
userStatus === 'pass' ||
userStatus === 'active';
return isErrnoOk && hasUserInfo && isStatusOk;
},
}
if (platform === 'baijiahao') {
const errno = (data as { errno?: number })?.errno;
if (errno === 0) {
// 请求成功,但可能没有用户信息
if (!isValid) {
logger.warn('Baijiahao errno=0 but no user info');
return false;
}
return true;
}
// errno 非 0,Cookie 无效
logger.warn(`Baijiahao errno=${errno}, cookie invalid`);
return false;
}
curl 'https://baijiahao.baidu.com/builder/app/appinfo' \
-H 'Cookie: BDUSS=xxx; STOKEN=xxx; ...' \
-H 'Referer: https://baijiahao.baidu.com/'
预期结果:
{
"errno": 0,
"data": {
"user": {
"name": "账号名称",
"app_id": 123456
}
}
}
curl 'https://baijiahao.baidu.com/builder/app/appinfo' \
-H 'Cookie: BDUSS=invalid; STOKEN=invalid;' \
-H 'Referer: https://baijiahao.baidu.com/'
预期结果:
{
"errno": 110,
"errmsg": "未登录"
}
| errno | 含义 | 处理方式 |
|---|---|---|
| 0 | 成功 | 检查是否有用户信息 |
| 110 | 未登录 | Cookie 无效,需要重新登录 |
| 其他 | 其他错误 | Cookie 可能无效或权限不足 |
[Baijiahao] API response: errno=0, errmsg=success, user.name=三千痴缠坠花湮, user.app_id=1833101008440434, user.status=audit
API check cookie for baijiahao: valid=true, statusCode=0
[Baijiahao] API response: errno=110, errmsg=未登录, user.name=undefined, user.app_id=undefined, user.status=undefined
[Baijiahao] Cookie invalid: errno=110, hasUserInfo=false, status=undefined
[API] Baijiahao errno=110, cookie is invalid
API check cookie for baijiahao: valid=false, statusCode=110