es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

UnityWebRequest GET falla para http://localhost:8000 cuando HttpClient, el navegador y Postman tienen éxito. El servidor está en Rust: Rocket.

Para resumir, estoy intentando hacer funcionar un cliente Unity. Está haciendo una solicitud GET simple a: “http://localhost:8000/api/board”. Esta solicitud funciona bien en:
– mi navegador
– postman
– HttpClient de .net dentro del modo editor de Unity
– si construyo y ejecuto una versión de WebGL, la página web resultante funcionará (tuve que agregar configuraciones CORS al servidor primero)

NO funciona para UnityWebRequest dentro del modo editor de Unity, lo cual es muy frustrante, la construcción de webgl lleva mucho tiempo.

No tengo idea de por qué no funciona. Otras rutas como “https://httpbin.org/get” funcionan bien en el modo editor. Siento que tiene algo que ver con UnityWebRequest. También intenté desactivar el firewall. Estoy usando Unity 2021.2.7f1, todo esto se ejecutó dentro del editor mientras se construía para Windows.

Lo siguiente funciona bien:
“`c#
HttpClient client = new HttpClient();
System.Uri uri = new System.Uri("http://localhost:8000/api/board");
string responseBody = await client.GetStringAsync(uri);

<pre><code><br />Lo siguiente falla con el mensaje de error "No se puede conectar con el host de destino":
“`c#
System.Uri uri = new System.Uri(“http://localhost:8000/api/board”);
UnityWebRequest www = UnityWebRequest.Get(uri);
UnityWebRequestAsyncOperation operation = www.SendWebRequest();

while (!operation.isDone)
await Task.Yield();

if (www.result != UnityWebRequest.Result.Success)
{
// Error stuff
}

EDICIÓN:

CORRECCIÓN

Resulta que el problema era el servidor que hice en Rust Rocket. Lo tenía configurado como el valor predeterminado address = "localhost". Lo cambié a address = "0.0.0.0" y ahora funciona bien en el modo de reproducción del editor. No tengo idea de por qué 0.0.0.0 funcionó y localhost no.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución: UnityWebRequest falla al hacer una solicitud HTTP GET simple

    Problema

    El usuario está intentando hacer una solicitud HTTP GET simple a “http://localhost:8000/api/board” utilizando UnityWebRequest dentro del modo Editor de Unity, pero falla con un error de “No se puede conectar con el host de destino”. Sin embargo, la solicitud funciona correctamente en el navegador, en Postman y en HttpClient de .NET dentro del modo editor de Unity. Además, funciona después de compilar y ejecutar una compilación WebGL, donde la página web resultante funcionará (después de agregar la configuración de CORS al servidor primero). Otras rutas como “https://httpbin.org/get” funcionan correctamente en modo editor. El usuario está utilizando Unity 2021.2.7f1, ejecutando dentro del editor mientras construye para Windows.

    Causa

    Después de algunas investigaciones, el usuario identificó que el problema estaba con el servidor, que habían creado en Rust Rocket. El servidor estaba configurado con la dirección predeterminada address = "localhost", lo cual estaba causando el problema. Cambiar la dirección a address = "0.0.0.0" solucionó el problema y permitió que la solicitud funcionara correctamente en el modo de reproducción del editor. No está claro por qué 0.0.0.0 funcionó pero localhost no.

    Solución

    Si te enfrentas a un problema similar, intenta cambiar la dirección del servidor a address = "0.0.0.0" en el archivo de configuración de tu servidor Rust Rocket. Esto permitirá que UnityWebRequest realice la solicitud correctamente.

    También es una buena idea comprobar la configuración de tu firewall y asegurarte de que no estén impidiendo que la solicitud se realice. Además, asegúrate de que tu servidor esté configurado correctamente para gestionar las solicitudes CORS si estás realizando solicitudes desde un dominio diferente.

    Si ninguno de los métodos anteriores funciona, puedes intentar utilizar una biblioteca diferente para hacer la solicitud, como HttpClient de .NET u otra biblioteca HTTP que se sepa que funciona con Unity.

Comments are closed.