使用 Python 检测 QQ 在线状态的方法与完整代码

Aria
Aria
发布时间:2026-10-12 | 1人浏览过
原创

本文介绍如何使用 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}")

准备条件与操作顺序

  1. 环境准备:确保系统已安装 Python 3.6 及以上版本。代码仅使用标准库 urllib,无需额外 pip install 安装第三方依赖。
  2. 修改目标参数:在脚本末尾将 target_qq = "..." 替换为实际需要查询的 QQ 纯数字账号。如需连续检测多个号码,可将函数封装至循环并添加 time.sleep(1) 控制间隔。
  3. 执行脚本:保存文件为 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 网络请求与接口调用的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表