как исправить получение {ошибка загрузки с 400 - общая / неизвестная ошибка HTTP} при попытке загрузить форму входа - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь включить функцию входа в игру.Что я пытаюсь сделать, так это когда я вошел в систему, я хочу, чтобы свойства игрока возвращались обратно, например, {здоровье, боеприпасы, сила ....} Я уже проверял это с почтальоном.В почтальоне работает нормально, но не в единстве.

Вот изображения, которые я пробовал в почтальоне.

Авторизация в почтальоне

Заголовок в посте man

Тело в посте man

Вот мои коды

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System.Text;

public class Login : MonoBehaviour
{
    public string inputUserName;
    public string inputPassword;

string loginURL = "http://192.168.10.89:8080/GameManage/userLogin/";

private void Start()
{
    StartCoroutine(login("09256358599", "123456789"));
}


IEnumerator login(string username, string password)
{
    WWWForm form = new WWWForm();
    form.AddField("phoneNumber", "09256358599");
    form.AddField("password", "123456789");

    var json = "{\"phoneNumber\":\"" + username + "\",\"password\":\"" + password + "\"}";

    using (UnityWebRequest www = UnityWebRequest.Post("http://192.168.10.89:8080/GameManage/userLogin/", json))
    {

        byte[] bytes = GetBytes(json);
        UploadHandlerRaw uH = new UploadHandlerRaw(bytes);
        www.uploadHandler = uH;

        www.SetRequestHeader("Content-Type", "application/json");
        www.uploadHandler.contentType = "application/json";

        yield return www.SendWebRequest();
        if (www.isNetworkError || www.isHttpError)
        {
            Debug.LogErrorFormat(this, "Upload failed with: {0} - {1}", www.responseCode, www.error);
        }
        else
        {
            Debug.Log("FORM UPLOAD COMPLEˇE");
        }
    }
}



 private byte[] GetBytes(string json)
 {
    //throw new NotImplementedException();
    byte[] bytes = Encoding.UTF8.GetBytes(json);
    return bytes;
 }
}

И как мне это сделатьвернуть свойства игрока.То, что я делаю сейчас, это просто debug.log.

Ответы [ 3 ]

1 голос
/ 28 марта 2019

Вам нужно вызвать SetRequestHeader, чтобы установить заголовок авторизации

, он может выглядеть следующим образом

using (UnityWebRequest www = UnityWebRequest.Post("http://192.168.10.89:8080/GameManage/userLogin/", json))
    {
       String username = "abc";
       String password = "123";
       String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
       www.SetRequestHeader("Authorization", "Basic " + encoded);
0 голосов
/ 28 марта 2019

Вам не нужно передавать объект WWWForm form в методе UnityWebRequest.Post. Попробуйте создать новый UnityWebRequest объект, закодируйте строку json в байты, а также создайте DownloadHandlerBuffer (чтобы прочитать объект json, который вы хотите вернуть)

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System.Text;

public class Login : MonoBehaviour
{
    public string inputUserName;
    public string inputPassword;

    string loginURL = "http://192.168.10.89:8080/GameManage/userLogin/";

    private void Start()
    {
        StartCoroutine(login("09256358599", "123456789"));
    }

    IEnumerator login(string username, string password)
    {
        var json = "{\"phoneNumber\":\"" + username + "\",\"password\":\"" + password + "\"}";
        var request = new UnityWebRequest(loginURL, "POST");
        var bodyRaw = GetBytes(json);
        request.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw);
        request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
        request.SetRequestHeader("Content-Type", "application/json");
        yield return request.Send();

        if (request.isNetworkError || request.isHttpError)
        {
            Debug.LogErrorFormat(this, "Upload failed with: {0} - {1}", request.responseCode, request.error);
        }
        else
        {
            Debug.Log("FORM UPLOAD COMPLETE");
            var results = request.downloadHandler.data; //this will contain the JSON data you 'll need
        }
    }

    private byte[] GetBytes(string json)
    {
        return Encoding.UTF8.GetBytes(json);
    }
}
0 голосов
/ 28 марта 2019

попробуйте добавить авторизацию в шапку

var headers = new Hashtable();
var byteArray = Encoding.ASCII.GetBytes("username:password");
headers.Add("Authorization", "Basic "+ Convert.ToBase64String(byteArray)); 
using (UnityWebRequest www = 
UnityWebRequest.Post("http://192.168.10.89:8080/GameManage/userLogin/", json, headers))
{
 // your code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...