You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用curl_cffi或requests通过Cookie登录Steam商店失败,求解决方案

使用curl_cffi或requests通过Cookie登录Steam商店失败,求解决方案

我太懂这种挫败感了——明明手动用反检测浏览器加Cookie编辑器能顺利登录Steam商店,但换成Python的curl_cffi或者requests就不行,肯定是哪里的细节没处理到位。咱们来拆解问题,一步步解决它。

1. 先检查Cookie的解析是否丢了关键属性

你现在手动拆分Cookie文本的方式,只提取了name和value,但Steam的登录验证可能依赖Cookie的其他属性,比如HttpOnlySameSiteDomainPath这些。手动解析很容易漏掉这些,导致Cookie无法被正确识别。

解决方案:用Python自带的http.cookiejar.MozillaCookieJar直接加载Netscape格式的Cookie文件,它会完整保留所有Cookie属性:

from curl_cffi import requests
import os
from http.cookiejar import MozillaCookieJar

def checkCookie(cookie):
    cookie_path = os.path.join("input", cookie)
    # 加载Netscape格式的Cookie文件,保留所有属性
    cookie_jar = MozillaCookieJar()
    cookie_jar.load(cookie_path, ignore_discard=True, ignore_expires=True)

    session = requests.Session()
    # 将完整的CookieJar导入session
    session.cookies.update(cookie_jar)
    
    # 精简请求头:只保留必要字段,让curl_cffi的impersonate自动处理其他头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
        'Accept-Language': 'en-IN,en;q=0.9',
        'Referer': 'https://store.steampowered.com/',
    }
    
    # 明确指定Chrome版本,和User-Agent完全匹配
    response = session.get(
        "https://store.steampowered.com/account/",  # 直接访问登录专属页面,验证更准确
        headers=headers,
        impersonate="chrome133",
        timeout=30,
        verify=True
    )

    # 换个更可靠的验证逻辑:检查页面是否包含登录后的专属内容
    if "Account Details" in response.text:
        print("Logged in successfully!")
    else:
        print("Login failed")
        # 额外输出排查信息
        print(f"Response status code: {response.status_code}")
        print(response.text[:500])

    with open('test.html', 'w', encoding='utf-8') as f:
        f.write(response.text)

checkCookie("cookie.txt")

2. 确保curl_cffi的模拟指纹和UA完全匹配

你之前用impersonate="chrome",默认是最新版Chrome,但你的UA写的是133,版本不匹配可能触发Steam的反检测。一定要让impersonate的版本和User-Agent里的版本一致,比如代码里的impersonate="chrome133"

3. 换个更靠谱的登录验证方式

你之前检查"youraccount_steamid",这个字符串可能是JS动态渲染的,静态HTML里不一定存在。换成访问需要登录的页面(比如/account/),然后检查页面里的登录后专属内容(比如"Account Details"),这样验证结果更准确。

4. 排查Cookie本身的问题

  • 确认Cookie文件是Netscape格式(就是Cookie编辑器导出的、开头带# Netscape HTTP Cookie File注释的那种),如果是JSON格式,需要先转换格式再加载。
  • 检查Cookie是否过期:手动登录Steam后重新导出一次Cookie,再进行测试。
  • 确保Cookie里包含steamLoginsteamLoginSecure这些关键的登录标识字段。

5. 让curl_cffi自动处理部分请求头

有些请求头(比如Accept-EncodingSec-Fetch-*Connection)curl_cffi的impersonate会自动生成符合浏览器行为的值,手动设置反而可能出现不匹配,导致被检测到。所以建议只保留必要的头字段即可。

备注:内容来源于stack exchange,提问作者Riyan

火山引擎 最新活动