使用UrlFetchApp发POST请求遇Error 403,curl正常如何解决?
解决Path of Exile API请求403错误(Google Apps Script)
403错误的核心原因是Google Apps Script默认请求头被API反爬机制拦截,尤其是User-Agent字段。Path of Exile的API会验证请求来源的客户端标识,而UrlFetchApp默认的标识会被判定为非合法请求。
解决方案:添加自定义请求头
修改你的请求配置,补充模拟合法客户端的请求头,同时优化payload的写法避免转义错误:
var URL = 'https://www.pathofexile.com/api/trade/search/Ancestor'; // 用对象定义payload,后续自动转成JSON字符串 var payload = { "query": { "status": {"option": "online"}, "type": "Tainted Chaos Orb", "stats": [{"type": "and", "filters": []}] }, "sort": {"price": "asc"} }; var options = { "method": "post", "contentType": "application/json", "payload": JSON.stringify(payload), "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", "Accept": "application/json" } }; // 发送请求并处理响应 var response = UrlFetchApp.fetch(URL, options); var responseData = JSON.parse(response.getContentText()); // 写入Google Sheets示例 var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 假设将结果写入A1单元格,实际可根据数据结构拆分写入多行多列 targetSheet.getRange(1, 1).setValue(JSON.stringify(responseData));
关键细节说明
- User-Agent模拟:用主流浏览器的标识替换默认值,让API认为请求来自合法客户端,你可以根据自己常用浏览器更新该值。
- JSON.stringify优化:避免手动编写JSON字符串时的转义错误,同时保证payload格式完全符合API要求。
- Headers补充:添加
Accept头明确指定响应格式,进一步提升请求的合法性。
如果仍出现403,可排查:
- 确认赛季端点是否正确(
Ancestor需为当前活跃赛季名称,赛季更新后需同步修改) - 部分场景可能需要添加
Cookie或Authorization头(贸易搜索API通常无需登录,但特殊查询可能需要)
内容的提问来源于stack exchange,提问作者Renato Bichara Vieira
相关产品推荐
相关产品推荐

