How to stay connected on a website to send a WWWForm?

Hi everyone,

I explain my situation, so, I’m working on a game which is suppose to send score, pseudo, etc, to a web leaderboard. My problem is that I’ve two different URL, one for login (url/Account/Login) and the second to post my form (url/api/Post).

So, my question is, is it possible to login to the first URL and then send my form to the second?

I tried some things like that but nothing worked, I’ve got errors “500 Internal Server Error” or “401 unauthorized”.

IEnumerator SendForm(){
             WWWForm form = new WWWForm();
             Hashtable headers = form.headers;
             form.AddField ("null", "null");
             byte[] data = form.data;
             headers["Authorization"]="Basic " + System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("usernam:password"));
             WWW w = new WWW(url+"Account/Login", data, headers);
             yield return w;
             if (!string.IsNullOrEmpty(w.error)) {
                 Debug.Log(w.error);
             }
             else {
                 Debug.Log(w.text);
                 form.AddField ("name", name);
                 form.AddField ("playerName", playerName);
                 form.AddField ("nationality", nationality);
                 form.AddField ("mobile", phone);
                 form.AddField ("points", GameManager.score.ToString());
                 WWW www = new WWW(url+"api/Scores", data, headers);
                 yield return www;
                 if (!string.IsNullOrEmpty(www.error)) {
                     Debug.Log(www.error);
                 }
                 else {
                     Debug.Log(www.text);
                 }
             }
         }

Thanks, Sephis

If someone need it, if found a solution:

using UnityEngine;
using System;
using System.Collections.Generic;
using System.Collections;
using System.Net;
using MiniJSON;

public class SendForm : MonoBehaviour {
    public string[] responseParsed = new string[];

    string     baseUrl = "https://www.company.com/game/";
    bool    scoreSubmitted = false;

    string bearerToken = string.Empty;
    WebClient client = new WebClient();

    //********** Login**************\\
    public IEnumerator Login () {
        client.BaseAddress = baseUrl;

        // Setup the request headers
        client.Headers.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        client.Headers.Add("X-Requested-With", "XMLHttpRequest");

        // Create the authentication request string
        var login = string.Format("grant_type=password&username={0}&password={1}", "username","password");

        UnsafeSecurityPolicy.Instate();
        string response = client.UploadString(new Uri(baseUrl+ "Token"), login);
       
        yield return new WaitForSeconds(0.1f);
        if(!string.IsNullOrEmpty(response))
        {
            responseParsed = response.Split(new char[]{'"'}); // I did this because Json.Deserialize didn't work
            bearerToken = responseParsed[3];
            Debug.Log(bearerToken);
            Array.Clear(responseParsed,0, responseParsed.Length);
        }

        if(!string.IsNullOrEmpty(bearerToken))
        {
            StartCoroutine(SubmitScore());
        } else Debug.Log("No bearer Token");
    }
    //************SUBMIT SCORE****************\\   
    public IEnumerator SubmitScore () {
        client.Headers.Add("Content-Type", "application/json; charset=UTF-8");
        client.Headers.Add("X-Requested-With", "XMLHttpRequest");
        client.Headers.Add ("Authorization", "Bearer "+ bearerToken);
       
        Dictionary<string, object> dict = new Dictionary<string, object>();
        dict.Add("name", "name");
        dict.Add("mobile", "mobile");
        dict.Add("playerName", "playerName");
        dict.Add("nationality", "nationality");
        dict.Add("points", GameManager.score);
        string data = Json.Serialize(dict);
        Debug.Log(data);

        string response = client.UploadString(new Uri(baseUrl+"api/Scores"), data);
        if(!string.IsNullOrEmpty(response))
        {
            scoreSubmitted = true;
            Debug.Log (response);
        }
        yield return data;
    }
}
1 Like