Roblox调用外部无认证GraphQL API失败求助
Roblox调用GraphQL API返回“Something went wrong”的排查与修复
你的代码有几个关键问题导致了这个结果,下面是具体排查和修复方案:
1. 最直接的原因:函数固定返回false
你的craftCall函数最后写死了return false,不管请求成功与否都会返回false,所以必然触发else分支打印错误提示。
2. 无法排查问题:未捕获pcall错误信息
你用了pcall但没捕获执行过程中的错误,根本不知道是网络请求失败、JSON解析出错还是API返回异常,完全没法定位问题。
修复后的完整代码
local HttpService = game:GetService("HttpService") local open_api = "https://graphqlzero.almansi.me/api" -- 用HttpService自动生成JSON,避免手动写JSON的语法错误 local payload = HttpService:JSONEncode({ query = "query { post(id: 1) { id title body }}" }) local headers = { ["Content-Type"] = "application/json" } local function craftCall() local response, errMsg local data -- 捕获pcall的执行状态和错误信息 local isSuccess = pcall(function () response = HttpService:PostAsync(open_api, payload, Enum.HttpContentType.ApplicationJson, false, headers) data = HttpService:JSONDecode(response) end) -- 请求过程出错,打印错误信息 if not isSuccess then print("请求失败原因:", errMsg) return false end -- 未解析到有效数据 if not data then print("未获取到有效返回数据") return false end -- 格式化打印返回数据,方便查看 print("API返回结果:", HttpService:JSONEncode(data, true)) return true -- 请求成功时返回true end if craftCall() then print("Success") else print("Something went wrong") end
额外需要检查的点
- Roblox HTTP白名单:在开发者控制台的「设置→安全」里,把
https://graphqlzero.almansi.me添加到允许的HTTP请求URL列表,否则Roblox会拦截这个外部请求。 - API可用性:手动用工具测试这个API是否能正常访问,确认你的query语句是有效的(你的原query是正确的)。
- 网络环境:确保Roblox Studio能正常连接到外部网络,没有被防火墙或代理拦截。
内容的提问来源于stack exchange,提问作者emilie zawadzki
相关产品推荐
相关产品推荐

