使用 Python 检测 QQ 在线状态的方法与完整代码
本文介绍如何使用 Python 脚本通过腾讯 WPA 公开接口检测手机 QQ 的在线状态。代码已全面适配 Python 3 标准库,通过解析 HTTP 响应头 Content-Length 判断在线或离线,并附带异常处理、频率控制与常见报错排查方案,适合快速集成到自动化监控流程中。
检测原理与接口说明
腾讯网页版助理(WPA)提供了一个公开查询接口,标准格式为:http://wpa.qq.com/pa?p=1:{QQ号}:1。该接口返回的静态页面体积会随账号状态变化:历史上返回长度 2329 字节通常表示在线,2262 字节表示离线。本方法无需安装官方 SDK 或逆向加密协议,仅依赖基础 HTTP 请求即可实现轻量级状态轮询。
Python 3 完整代码
原示例依赖 Python 2 的 urllib2 与反引号语法,在现代环境中已失效。以下为兼容 Python 3、加入防封策略与错误捕获的升级版本:
import urllib.request
import datetime
import time
def chk_qq(qq_num):
# 构造标准查询链接
url = f"http://wpa.qq.com/pa?p=1:{qq_num}:1"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
try:
req = urllib.request.Request(url, headers=headers)
with urllib.request.urlopen(req, timeout=10) as resp:
content_len = resp.headers.get("Content-Length")
# 根据历史经验值判断状态
if content_len == "2329":
return "Online"
elif content_len == "2262":
return "Offline"
else:
return f"Unknown Status! (Length: {content_len})"
except urllib.error.HTTPError as e:
return f"HTTP Error: {e.code}"
except urllib.error.URLError as e:
return f"Network Error: {e.reason}"
except Exception as e:
return f"Unexpected Error: {e}"
if __name__ == "__main__":
target_qq = "12345678" # 替换为待检测的号码
status = chk_qq(target_qq)
print(f"{datetime.datetime.now()} | QQ: {target_qq} -> {status}")
准备条件与操作顺序
- 环境准备:确保系统已安装 Python 3.6 及以上版本。代码仅使用标准库
urllib,无需额外pip install安装第三方依赖。 - 修改目标参数:在脚本末尾将
target_qq = "..."替换为实际需要查询的 QQ 纯数字账号。如需连续检测多个号码,可将函数封装至循环并添加time.sleep(1)控制间隔。 - 执行脚本:保存文件为
qq_status.py,在终端运行python qq_status.py。程序将向腾讯服务器发起一次 GET 请求,读取响应头后即时打印检测结果。
完成判断与排错指南
正常执行后,终端会输出当前时间与对应状态字符串。若返回非预期结果,可按以下逻辑逐一核对:
- Length 不为 2329 或 2262:腾讯可能临时调整了接口返回结构,或目标账号开启了严格的隐私限制导致直接返回拦截页。日志会输出实际长度,可作为进一步分析的参考依据。
- Network Error / Timeout:检查本机 DNS 解析是否正常,以及出口 IP 是否触发了频率限制。高频单线检测易被识别,建议在循环中加入
time.sleep(0.5~2)模拟人工节奏。 - HTTP Error 403 Forbidden:请求头伪装不足。代码中已内置主流浏览器 UA,若仍返回 403,可尝试更换 UA 字符串或切换 IPv4/IPv6 节点绕过区域限流。
以上就是使用 Python 检测 QQ 在线状态的详细内容,更多关于 Python 网络请求与接口调用的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













