Comment obtenir des données d'en-tête de cookie à partir de la page Web dans Unity?

StackOverflow https://stackoverflow.com/questions/19855171

  •  29-07-2022
  •  | 
  •  

Question

J'ai une page de registre et de connexion dans Unity3d et ma page de site Web, lorsque je publie mes données de registre ou de connexion d'Unity3d à mon site Web (Magento CMS), envoyez à ma propre erreur "Les données nécessaires ne sont pas possibles" et après voir ma demande Dans l'application httpanalyzer, je découvre que Unity3d ne peut pas accepter obtenir une chaîne de cookie. Comment obtenir du cookie à partir du Web après la connexion ou enregistrer les utilisateurs? mon code Unity3d:

    var form = new WWWForm();
    form.AddField( "SN", SystemInfo.deviceUniqueIdentifier.ToString());
    form.AddField( "UserName ", UserName );
    form.AddField( "year",Year );
    form.AddField( "month", Month );
    form.AddField( "day", Day );
    form.AddField( "dob",Year+"/"+Month+"/"+Day );
    form.AddField( "gender", Gender );
    form.AddField( "password", Pass );
    // Create a download object
    var download = new WWW(URL, form);
    // Wait until the download is done
    yield download;
    // show the Results
    Debug.Log(download.text);   
    if(download.error != null)
    {
        Debug.Log("Err :"+download.error);
        Flag = "1"; 
    }
Était-ce utile?

La solution

Habituellement, vous obtenez "le rembobinage des données nécessaires n'est pas possible" lorsque la page que vous essayez de charger fait une redirection. Je ne pense pas que vous puissiez faire une demande dans Unity avec une option "Suivre Redirection".

Je ne connais pas le CMS Magenta, donc je ne peux pas vous dire comment corriger ce problème. Pour votre problème de cookie, c'est assez simple dans l'unité: il vous suffit d'intercepter l'en-tête "set-cookie" dès un premier appel, puis de renvoyer une en-tête avec "cookie" dans vos prochains appels:

#pragma strict

import System.Collections.Generic;

var url:String = "";
var cookie:String = "";

/// interface
private var stringToEdit:String = "";
function OnGUI(){
    if (url!="" && GUI.Button(Rect(10,10,200,30),"Click"))
        StartCoroutine(LoadData());

    stringToEdit = GUI.TextArea (Rect (10, 50, 600, 400), stringToEdit);
}
/// debug
function Debug(s:String){
    stringToEdit += s+"\n";
}

function LoadData():IEnumerator{
    Debug(url);

    var form : WWWForm = new WWWForm();

    var time:String     = System.DateTime.Now.Ticks.ToString();
    form.AddField("time", time);

    // construct your header calls
    var headers : Hashtable = form.headers;
    if(cookie!="")
        headers["Cookie"] = cookie;

    var www : WWW = new WWW(url, form.data, headers);

    yield www;

    if(!www.error){
        Debug(www.text);

        // get the cookie and keep it
        if(www.responseHeaders.ContainsKey('SET-COOKIE')){
            var data:String[] = www.responseHeaders['SET-COOKIE'].Split(";"[0]);
            if(data.length>0){
                cookie = data[0];
            }
        }

    }else
        Debug(www.error);
    // debug
    for(var header:KeyValuePair.<String, String> in www.responseHeaders)
        Debug(header.Key+" "+header.Value);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top