PDGA API登录成功后请求数据返回403无权访问如何解决?
PDGA API 403错误解决方案
核心错误原因
- Cookie拼接规则错误:PDGA要求身份Cookie格式为
session_name=sessid,你将两个参数的顺序写反,导致身份凭证无效 - 请求头结构不符合Google Apps Script要求:UrlFetchApp的所有请求头参数必须放到
headers属性下,你直接将Cookie、Content-Type放在请求参数根节点,导致服务端无法读取到正确的头信息 - 缺少必要的CSRF校验头:登录接口返回的token需要添加到后续请求头的
X-CSRF-Token字段中,否则API会直接拒绝匿名访问 - 登录请求payload未序列化:JSON格式的请求体需要先转为字符串,否则会默认以表单格式发送,服务端无法解析登录参数
修正后可运行代码
function apiLogin() { // 替换为你自己的PDGA开发者账号密码 const Username = "your_username"; const Password = "your_password"; const LoginUrl = 'https://api.pdga.com/services/json/user/login'; const LoginDetails = { 'username' : Username, 'password' : Password }; const LoginRequest = { 'method' : 'post', 'headers': { 'Content-Type' : 'application/json' }, 'payload' : JSON.stringify(LoginDetails) }; const LoginResponse = UrlFetchApp.fetch(LoginUrl, LoginRequest); const LoginData = JSON.parse(LoginResponse.getContentText()); const SessionID = LoginData['sessid']; const SessionName = LoginData['session_name']; const Tok = LoginData['token']; const playerFetchPar = { 'method' : 'get', 'headers': { 'Cookie' : `${SessionName}=${SessionID}`, 'X-CSRF-Token': Tok }, 'muteHttpExceptions': true }; const PlayerResponse = UrlFetchApp.fetch('https://api.pdga.com/services/json/players?pdga_number=1',playerFetchPar); Logger.log(PlayerResponse.getContentText()); };
运行后即可在日志中看到PDGA编号为1的球员公开数据,后续可以根据需求修改接口参数拉取对应俱乐部的球员排名数据。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

