unity tag script buscar c# post get web unity3d

c# - tag - Unity GET/POST Wrapper



unity inspector separator (3)

¿A qué se refiere ese script GET? La clase WWW le permite recuperar datos GET muy bien, la información que necesita se encuentra en la propiedad de texto del objeto WWW instanciado. Aquí está la documentación:

http://unity3d.com/support/documentation/ScriptReference/WWW-text.html http://unity3d.com/support/documentation/ScriptReference/WWW.html

Todo lo que necesita hacer es ceder el objeto WWW, como está haciendo ahora, y luego leer cualquiera de las propiedades que le interesan, simple y llanamente, sin necesidad de clases adicionales.

En cuanto a enviar un objeto POST, para eso es para la clase WWWForm:

http://unity3d.com/support/documentation/ScriptReference/WWWForm.html

En resumen, usted acaba de crear un objeto WWWForm, agregarle campos a través de AddField (), y luego simplemente construir un nuevo objeto WWW con la URL POST y el objeto anterior, eso es todo. Ceda el objeto WWW y una vez que regrese, sus datos han sido enviados. Las respuestas son, nuevamente, en la propiedad del texto y los errores en el campo correspondiente. Sencillo, limpio y simple.

HTH!

Esta es una pregunta de Unity3d en C #. El objetivo es crear un objeto tal que pueda pasar una URL y recibir datos a través de GET , un objeto que yo crearía sería un contenedor para la lógica WWW. También me gustaría un objeto ''POST'' también, donde podría proporcionar una url y un ''Diccionario'' de pares clave-valor como las argumentaciones posteriores. Entonces ... finalmente nos gustaría algo como esto:

get_data = GET.request("http://www.someurl.com/somefile.php?somevariable=somevalue");

Y

post_data = POST.request("http://www.someurl.com/somefile.php", post) // Where post is a Dictionary of key-value pairs of my post arguments.

Para tratar de lograr esto, uso el objeto WWW . Ahora, para dar tiempo al objeto WWW para que se descargue, necesitamos que esto ocurra dentro de un objeto MonoBehaviour y yield los resultados. Así que obtuve esto, que funciona:

public class main : MonoBehavior { IEnumerator Start() { WWW www = new WWW("http://www.someurl.com/blah.php?action=awesome_stuff"); yield return www; Debug.Log(www.text); } }

Lo que realmente quiero es esto:

public class main : MonoBehavior { IEnumerator Start() { GET request = new GET("http://www.someurl.com/blah.php?action=awesome_stuff"); Debug.Log(request.get_data()); // Where get_data() returns the data (which will be text) from the request. } }

Ahora tengo el script principal adjunto al único GameObject en la jerarquía (llamado raíz). ¿Necesito tener también el script GET adjunto al GameObject raíz? ¿Puedo hacer eso dinámicamente desde main ?

En definitiva, necesito una solución que me permita enviar fácilmente solicitudes GET y POST .

¡Aclamaciones!


Ah, lo tengo!

Mi problema fue un malentendido sobre cómo funcionaron MonoBehaviour y Coroutines. La solución es muy simple.

En el editor, crea un GameObject vacío. Lo llamé DB. A continuación, adjunte el siguiente script:

using System; using UnityEngine; using System.Collections; using System.Collections.Generic; class DB : MonoBehaviour { void Start() { } public WWW GET(string url) { WWW www = new WWW(url); StartCoroutine(WaitForRequest(www)); return www; } public WWW POST(string url, Dictionary<string, string> post) { WWWForm form = new WWWForm(); foreach (KeyValuePair<String, String> post_arg in post) { form.AddField(post_arg.Key, post_arg.Value); } WWW www = new WWW(url, form); StartCoroutine(WaitForRequest(www)); return www; } private IEnumerator WaitForRequest(WWW www) { yield return www; // check for errors if (www.error == null) { Debug.Log("WWW Ok!: " + www.text); } else { Debug.Log("WWW Error: " + www.error); } } }

Entonces, en la función de inicio de su script principal, ¡puede hacer esto!

private DB db; void Start() { db = GameObject.Find("DB").GetComponentInChildren<DB>(); results = db.GET("http://www.somesite.com/someAPI.php?someaction=AWESOME"); Debug.Log(results.text); }

¡No he probado las solicitudes POST, pero ahora toda la lógica está completa! Envíe solicitudes HTTP a su deseo de corazones, ¡aplausos!


Aquí está el código de @ pandemoniumsyndicate modificado para agregar una devolución de llamada. El código original no es completamente correcto, ya que las funciones GET y POST se cerrarán inmediatamente después de llamar a la corutina. En ese momento, es probable que la solicitud de WWW aún no se haya completado y el acceso a cualquier campo excepto ( www.isDone ) no tiene sentido.

El siguiente código define un delegado, WWWRequestFinished , que se WWWRequestFinished cuando la solicitud finalice con el resultado de la solicitud y los datos recibidos, si los hay.

using System; using UnityEngine; using System.Collections; using System.Collections.Generic; public class WWWRequestor : MonoBehaviour { Dictionary<WWW, object> mRequestData = new Dictionary<WWW, object>(); public delegate void WWWRequestFinished(string pSuccess, string pData); void Start() { } public WWW GET(string url, WWWRequestFinished pDelegate) { WWW aWww = new WWW(url); mRequestData[aWww] = pDelegate; StartCoroutine(WaitForRequest(aWww)); return aWww; } public WWW POST(string url, Dictionary<string, string> post, WWWRequestFinished pDelegate) { WWWForm aForm = new WWWForm(); foreach (KeyValuePair<String, String> post_arg in post) { aForm.AddField(post_arg.Key, post_arg.Value); } WWW aWww = new WWW(url, aForm); mRequestData[aWww] = pDelegate; StartCoroutine(WaitForRequest(aWww)); return aWww; } private IEnumerator WaitForRequest(WWW pWww) { yield return pWww; // check for errors string aSuccess = "success"; if (pWww.error != null) { aSuccess = pWww.error; } WWWRequestFinished aDelegate = (WWWRequestFinished) mRequestData[pWww]; aDelegate(aSuccess, pWww.text); mRequestData.Remove(pWww); } }