在Unity中调用Random.org获取随机数遇403错误,求示例代码
Unity调用Random.org接口获取随机数的问题解决及示例代码
你遇到的403 Forbidden错误,核心原因是Random.org的公开API会校验请求的User-Agent字段——Unity默认的UnityWebRequest使用的User-Agent被服务器识别为非合法客户端,因此被拦截。
以下是修正后的可运行代码,关键是给请求添加合法的User-Agent头:
void Start() { StartCoroutine(FetchRandomNumber()); } IEnumerator FetchRandomNumber() { // Random.org的整数随机数API地址,参数表示获取1个1-6之间的十进制整数 string apiEndpoint = "https://www.random.org/integers/?num=1&min=1&max=6&col=1&base=10&format=plain&rnd=new"; using (UnityWebRequest request = UnityWebRequest.Get(apiEndpoint)) { // 设置浏览器风格的User-Agent,避免被服务器拦截 request.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"); // 发送请求并等待结果 yield return request.SendWebRequest(); // 处理请求结果 switch (request.result) { case UnityWebRequest.Result.ConnectionError: case UnityWebRequest.Result.DataProcessingError: Debug.LogError($"请求失败: {request.error}"); break; case UnityWebRequest.Result.ProtocolError: Debug.LogError($"HTTP错误 {request.responseCode}: {request.error}"); break; case UnityWebRequest.Result.Success: // 去除返回内容中的换行和空格,确保得到干净的数字 string randomNum = request.downloadHandler.text.Trim(); Debug.Log($"获取到随机数: {randomNum}"); // 可以在这里把字符串转为整数使用 if (int.TryParse(randomNum, out int result)) { Debug.Log($"转换为整数: {result}"); } break; } } }
额外注意事项:
User-Agent可以根据需要调整,只要是服务器认可的合法客户端标识即可,不一定非要用Chrome的;- Random.org的免费API有调用限制(每小时最多1000次请求,每日上限更高但仍有限制),如果是高频请求或商业项目,建议使用他们的付费API服务;
- 要处理返回内容的异常情况,比如服务器返回非数字的提示文本(比如请求超限),避免程序崩溃;
- 移动端项目需要确保PlayerSettings中已经开启了Internet权限(默认是开启状态,但最好确认)。
内容的提问来源于stack exchange,提问作者a_7md.f
相关产品推荐
相关产品推荐

