开发者问题收集

在 Unity C# 脚本中向 localhost 发出 GET 请求

2019-01-22
4125

我尝试使用 Unity C# 脚本从本地主机发出 JSON 负载的 GET 请求。我使用单独的 C# 文件成功发出了 POST、PUT 和 GET 请求,但 Unity 需要使用 UnityWebRequest。我的 Unity 代码在 Unity 控制台中返回“未知错误”错误,但在日志文件中第一个错误是“无法连接到目标主机”。

通过更改网址解决了类似的问题。我知道我的网址是正确的,因为我可以使用 Postman 应用程序和我自己单独的 C# 代码成功发出请求。 调试代码对 isNetworkError 返回 True。

我使用 ToDo API 教程 此处 设置了我的服务器,并将项目内容修改为仅包含 ID 和字符串数据。

如果有人能告诉我为什么它不起作用,并提供解决方案,我将不胜感激!

我的代码:

    IEnumerator GetText()
{
    using (UnityWebRequest www = UnityWebRequest.Get("http://...localhost:[my port]/api/Todo"))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            UnityEngine.Debug.Log(www.error);
            UnityEngine.Debug.Log(www.isNetworkError);
        }
        else
        {
            // Show results as text
            UnityEngine.Debug.Log(www.downloadHandler.text);
        }
    }
}

这是网络服务器上的数据:

[
  {
    "id": 2,
    "data": "String text"
  }
]

作为参考,这里是可单独执行相同操作的 C# 代码的一部分:

async static void GetRequest(string url)
{
    using (HttpClient client = new HttpClient())
    {
        using (HttpResponseMessage response = await client.GetAsync(url))
        {
            using (HttpContent content = response.Content)
            {
                string mycontent = await content.ReadAsStringAsync();

                UnityEngine.Debug.Log(content);
            }
        }
    }
}
3个回答

实际上 UnityWebRequest 会自动连接到端口 443,这就是它与 postman 兼容而不是与 unity 兼容的原因

Antoine Widmer
2020-08-15

由于您的错误表明“无法连接到目标主机”。这可能是因为“...localhost”不是有效主机。

尝试将“...localhost”更改为“localhost”,并将 [my port] 替换为有效端口号。

Alexander Higgins
2019-01-22

您尝试访问 http://...localhost:[my port]/api/Todo ,我认为该地址无效。请将其更改为正确的地址。

shingo
2019-01-22