如何用Python编写程序测试Battle.net登录接口的Post请求方法
实现Battle.net中国区登录的Python脚本
嘿,我来帮你完善这个登录脚本!Battle.net的登录接口有反爬机制,直接POST账号密码肯定行不通,得先处理CSRF令牌和会话Cookie,下面是完整的实现方案:
关键前提说明
Battle.net的登录流程不是简单的POST账号密码就完事,需要注意这几点:
- 必须先访问登录页面获取CSRF令牌,否则POST请求会被拒绝
- 要模拟真实浏览器的请求头,避免被反爬拦截
- 登录成功后,需要把会话Cookie同步给浏览器,才能打开已登录状态的目标页面
完整代码实现
import requests import webbrowser import tempfile import os from bs4 import BeautifulSoup # 配置信息:替换成你的实际账号密码 ACCOUNT_NAME = "<your_account_name>" PASSWORD = "<your_password>" # 页面URL LOGIN_PAGE_URL = "https://www.battlenet.com.cn/login/zh/?ref=https://www.battlenet.com.cn/wow/zh/vault/character/auction/index&app=com-wow" TARGET_PAGE_URL = "https://www.battlenet.com.cn/wow/zh/vault/character/auction/index" def main(): # 1. 创建会话对象,自动管理Cookie session = requests.Session() # 模拟Chrome浏览器的请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Referer": LOGIN_PAGE_URL } # 2. 访问登录页面,获取CSRF令牌 print("正在获取登录页面信息...") login_page_response = session.get(LOGIN_PAGE_URL, headers=headers) soup = BeautifulSoup(login_page_response.text, "html.parser") # 提取页面中的CSRF令牌(不同时期可能会变,若找不到可检查页面源码的input标签) csrf_token = soup.find("input", {"name": "csrfToken"})["value"] print(f"获取到CSRF令牌: {csrf_token[:10]}...") # 3. 构造登录请求参数 login_payload = { "accountName": ACCOUNT_NAME, "password": PASSWORD, "csrfToken": csrf_token, "app": "com-wow", "ref": "https://www.battlenet.com.cn/wow/zh/vault/character/auction/index" } # 4. 发送登录请求 print("正在尝试登录...") login_response = session.post( LOGIN_PAGE_URL, data=login_payload, headers=headers, allow_redirects=True # 自动处理登录后的重定向 ) # 5. 验证登录结果 if TARGET_PAGE_URL in login_response.url: print("登录成功!正在打开目标页面...") # 把Session的Cookie导出成浏览器可识别的Netscape格式 with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as cookie_file: for cookie in session.cookies: cookie_file.write( f"{cookie.domain}\tTRUE\t{cookie.path}\tFALSE\t{cookie.expires}\t{cookie.name}\t{cookie.value}\n" ) # 用Chrome打开目标页面并加载Cookie(需关闭所有Chrome窗口再运行) chrome_cmd = f'"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --user-data-dir={tempfile.gettempdir()} --cookie-file={cookie_file.name} {TARGET_PAGE_URL}' os.system(chrome_cmd) # 可选:登录完成后删除临时Cookie文件 # os.unlink(cookie_file.name) else: print("登录失败!请检查账号密码是否正确,或是否需要验证码/二次验证。") if __name__ == "__main__": main()
重要注意事项
- CSRF令牌定位:如果代码运行时找不到
csrfToken,可以手动打开登录页面查看源码,找到实际的令牌字段名(可能会有变动) - 浏览器Cookie同步:上面用的是Chrome的启动参数,如果你用Firefox等其他浏览器,需要调整Cookie加载的方式
- 反爬与验证:如果遇到验证码或手机/邮箱二次验证,脚本需要额外处理(比如手动输入验证码,或者调用验证码识别服务)
- 账号安全:不要把账号密码硬编码在代码里,建议用环境变量或加密配置文件读取
内容的提问来源于stack exchange,提问作者Enhao Lan
相关产品推荐
相关产品推荐

