Я хочу отправить файл JSON из моего приложения Unity на мой Laravel бэкэнд. Кажется, что-то не так с моим почтовым запросом, но я не могу понять, что это такое.
Отправка запроса с использованием Unity
public void SendRequest()
{
// serializable struct
OfferData data = new OfferData(OfferSize.JUMBO, OfferType.AD, 50, 10);
StartCoroutine(RequestHandler.Post(API_URL + "shop/store", JsonUtility.ToJson(data), (response) =>
{
if (response == null)
{
return;
}
// success
Debug.Log(response);
}));
}
JSON:
{
"size":3,
"type":1,
"gold":50,
"gems":10
}
Функция post в RequestHandler:
public static IEnumerator Post(string uri, string data, Action<string> response)
{
UnityWebRequest webRequest = UnityWebRequest.Post(uri, data);
webRequest.SetRequestHeader("Content-Type", "application/json");
yield return webRequest.SendWebRequest();
if (webRequest.isNetworkError)
{
Error(webRequest.error);
response(null);
}
else
{
response(webRequest.downloadHandler.text);
}
}
Если я отправляю UnityWebRequest с Laravel, то отправит успешный ответ, однако, напечатанный массив ( смотри ниже) просто пусто. Laravel не может закодировать JSON.
Получение запроса в Laravel
Вот где запрос HTTP Post обрабатывается в функции моего контроллера:
public function store(Request $request)
{
Log::debug($request->json()->all());
}
Что дает ожидаемый результат при использовании Почтальона:
array ('size' => 3, 'type' => 1, 'gold' => 50, 'gems' => 10)
Отправка аналогичного запроса с тем же JSON с использованием Unity:
array ()
Когда я использую $request->getContent()
Я действительно могу увидеть свои данные. Почему массив пуст?
Успешный заголовок запроса
Заголовок запроса при отправке из Почтальона:
{
"content-type": "application/json",
"user-agent": "PostmanRuntime/7.21.0",
"accept": "*/*",
"cache-control": "no-cache",
"postman-token": "d8f323fc-f2c8-49b8-a023-2955122fa20e",
"host": "127.0.0.1:8000",
"accept-encoding": "gzip, deflate",
"content-length": "119",
"cookie": "XSRF-TOKEN=eyJpdiI6IkRyU1RqSkppcVdyUmpuVHI2Ym55XC9RPT0iLCJ2YWx1ZSI6ImQrc1QrOTcyWE1GSXM3SGQrVlBsTG1lZ0dXd1FCQlRPellTQm83Z0FkWFc0UktjUW9PNHRqS3B3Z2Rya1ZZS2IiLCJtYWMiOiIxMmNlZTFiODc2MTlmNmVhYjI3ZGI1MTQ1NTM2MGFjODQ4YjZhNzdlMmM4NWQwM2NiYzk1MjkzYzNiYjBmNTA5In0%3D; recludo_session=eyJpdiI6ImFLcUdCdU1WU2JzazNEaEFyaGoxbnc9PSIsInZhbHVlIjoiT1VtNzl4XC9HMW5reTdKUGNDdlBXMVdLK3hMNFR3Q2JxMzA1RVY3NWdVdmV5akJhbnBKeU9YdU5JSmdPdGYyNWUiLCJtYWMiOiI4MWJjOGVhMTcxNDI3M2VjNTU0MDc3NmNkZDU0NjZlMzhmYWI1MjRlZGNlZjhhNGEyNmNjMmY3YThiMzAyODNhIn0%3D",
"connection": "keep-alive"
}
Неправильный заголовок запроса
Заголовок запроса при отправке из Unity:
{
"host": "127.0.0.1:8000",
"user-agent": "UnityPlayer/2019.2.8f1 (UnityWebRequest/1.0, libcurl/7.52.0-DEV)",
"accept": "*/*",
"accept-encoding": "deflate, gzip",
"cookie": "XSRF-TOKEN=eyJpdiI6IlJhZE52emU1Z3hYUnVOWmtMbEdZa0E9PSIsInZhbHVlIjoibkdabkhZVnM1ZUYwSklvMzYrSHVLQ0Q5Y2NvRlVTMEhJOHpqMGFCSEZLZVQwd2NnT3NrUmNrXC9cL2Z4XC92M0J0QSIsIm1hYyI6Ijg4ZDUwZDQ4MWQ3OWM3ZjNlOTcxOWE3NzMxYjI1MmQ3NGQ2YzgwMWQ2MDE2YTQ5NTI3NWQ3MTg2ODM4NjMxY2UifQ%3D%3D; recludo_session=eyJpdiI6InoyMktDN3ByR1hYR0tHWCtvdmhOckE9PSIsInZhbHVlIjoiamZJVnlDbVYwZkdBU1wvMXhMeG1sWU5LdDY0d0NnQ0VucE1OK05UNDhUOG1Ya2o5ZUJIcFdaSktuakcrQjJqN1QiLCJtYWMiOiI1YTc5YTE5NDNhNjY5NWRlYzlmMDlkOGIyMWRiYTAzYzMwZTkwNzAzYjBhNTA2OGViOTUyOTlkYzMzYWJlMjA3In0%3D",
"content-type": "application/json",
"x-unity-version": "2019.2.8f1",
"content-length": "215"
}
Что мне не хватает? Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.