使用Python Requests模块登录PSN失败,求替代API方案
你遇到的invalid_client错误,核心原因是PSN的OAuth 2.0认证接口要求必须携带合法的客户端凭证(client_id和client_secret),而你的请求里只传了用户名和密码,缺少这些关键参数。索尼的这个接口是给官方应用授权用的,所以这些凭证会隐藏在浏览器登录的请求里,你需要通过抓包来获取。
正确的API登录步骤
1. 抓取客户端凭证
打开浏览器开发者工具(F12),切换到「网络」标签,手动完成一次PSN登录流程。找到向https://auth.api.sonyentertainmentnetwork.com/2.0/oauth/token发送的POST请求,查看它的表单数据,你会看到client_id、client_secret、grant_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_token和refresh_token。你需要再次抓包浏览器修改密码的流程,找到对应的API端点,然后在请求头里带上Authorization: Bearer {access_token},并传入新密码等参数,就能完成密码修改操作。
注意:索尼可能会随时更新客户端凭证或API规则,所以如果后续再次出现失败,需要重新抓包确认参数是否变化。
内容的提问来源于stack exchange,提问作者Younus Ahamad




