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

使用Python Requests模块登录PSN失败,求替代API方案

解决PSN API登录失败(invalid_client)的问题

你遇到的invalid_client错误,核心原因是PSN的OAuth 2.0认证接口要求必须携带合法的客户端凭证(client_idclient_secret),而你的请求里只传了用户名和密码,缺少这些关键参数。索尼的这个接口是给官方应用授权用的,所以这些凭证会隐藏在浏览器登录的请求里,你需要通过抓包来获取。

正确的API登录步骤

1. 抓取客户端凭证

打开浏览器开发者工具(F12),切换到「网络」标签,手动完成一次PSN登录流程。找到向https://auth.api.sonyentertainmentnetwork.com/2.0/oauth/token发送的POST请求,查看它的表单数据,你会看到client_idclient_secretgrant_type这些参数,把它们记录下来。

2. 修改你的登录代码

把抓取到的客户端凭证添加到请求参数里,同时确保请求头和参数格式正确:

import requests

with requests.Session() as s1:
    # 先访问登录页面初始化会话,获取必要的Cookie
    s1.get("https://www.playstation.com/en-in/sign-in-and-connect/")
    
    login_data = {
        "username": "myemailhere",
        "password": "mypasswordhere",
        "client_id": "YOUR_CAPTURED_CLIENT_ID",  # 替换成你抓包得到的值
        "client_secret": "YOUR_CAPTURED_CLIENT_SECRET",  # 替换成你抓包得到的值
        "grant_type": "password",
        "scope": "psn:mobile.v2.core psn:clientapp"  # 权限范围根据抓包结果调整
    }

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36",
        "Content-Type": "application/x-www-form-urlencoded"
    }

    token_url = "https://auth.api.sonyentertainmentnetwork.com/2.0/oauth/token"
    response = s1.post(token_url, data=login_data, headers=headers)
    print(response.text)

3. 处理额外验证(如果有)

如果你的账号开启了两步验证(2FA),登录请求还需要携带验证码参数,比如code或者otp。这时候你需要在代码里添加获取验证码并提交的逻辑——比如调用短信/邮件验证码接口,或者让用户手动输入验证码后再继续请求。

后续修改密码的思路

登录成功后,接口会返回access_tokenrefresh_token。你需要再次抓包浏览器修改密码的流程,找到对应的API端点,然后在请求头里带上Authorization: Bearer {access_token},并传入新密码等参数,就能完成密码修改操作。

注意:索尼可能会随时更新客户端凭证或API规则,所以如果后续再次出现失败,需要重新抓包确认参数是否变化。

内容的提问来源于stack exchange,提问作者Younus Ahamad

火山引擎 最新活动