Google Apps Script调用Facebook Graph API批量请求报错排查
解决Google Apps Script调用Facebook Graph API批量请求的错误
你遇到的“流量过多”错误属于误导性提示,实际是请求格式不符合Facebook批量API的要求。Facebook批量请求需要以表单形式提交,其中batch参数的值为JSON字符串,而非直接发送完整的JSON payload。
修改后的代码
function fetchFbBatchMe() { let fbApiKey = getTokenFB(); // 构造batch请求数组并转为JSON字符串 let batchJson = JSON.stringify([{ method: 'GET', relative_url: 'me' }]); let params = { method: 'post', muteHttpExceptions: true, // 开启后可查看FB返回的真实错误详情 headers: { 'Authorization': fbApiKey // 无需手动设置Content-Type,UrlFetchApp会自动处理 }, payload: { batch: batchJson // 以表单字段形式提交batch参数 } }; try { let response = UrlFetchApp.fetch(FB_API_URL, params); let responseCode = response.getResponseCode(); let responseText = response.getContentText(); Logger.log('响应状态码: ' + responseCode); Logger.log('响应内容: ' + responseText); if (responseCode !== 200) { // 可根据FB返回的错误信息进一步排查问题 } } catch (e) { Logger.log('请求异常: ' + e); } }
关键修改说明
- 移除手动设置的
Content-Type:UrlFetchApp提交表单对象时,会自动设置Content-Type: application/x-www-form-urlencoded,这是Facebook批量API要求的标准格式。 - 表单形式提交
batch参数:将batch数组转为JSON字符串后,作为表单的batch字段提交,而非将整个batch对象转为JSON作为payload。 - 开启
muteHttpExceptions: true:即使返回非200状态码,也不会直接抛出异常,能获取到Facebook返回的真实错误信息,便于调试。
为什么Postman能正常运行?
Postman在发送请求时,若选择raw JSON格式,可能会自动转换为表单提交格式;或者Facebook API在某些场景下兼容JSON格式,但Google Apps Script的UrlFetchApp对请求格式要求更严格,必须严格遵循FB的API规范。
内容的提问来源于stack exchange,提问作者HedgehogNSK
相关产品推荐
相关产品推荐

