unityを使ってモバイルアプリを作成しているのですが、
unityのスクリプト(c#)からcakephpにPOSTすると404エラーがかえってきてしまいcakephpのコントローラーで動作をしてくれません。
ヘッダーのチェック機能をOFFにせずにPOSTリクエストができる方法を探しております。
書き方等わかりづらい部分があるかと思いますが、解決方法あればご教授ください。
(バリデーション等は全て外して記載しました。)
環境
cakephp3.4
php 7
unity 2018.4.19f
通信の流れ
① unity側からGETを送信(CSRfTokenをもらいに行く)
② cakephp側からCSRfTokenをjsonで①に渡す。
③ unity側からヘッダーリクエストに(CSRFTokenを入れて)POST送信する。
↓↓ この時にcakephp側で404(ページが見つからない)と言われてしまいます。
④ cakephp側で受け取ったPOSTから処理を実行値をJSONで返す。
⑤ unity側で受信
C#(送信側)
C#
1//クラス作成 2 [System.Serializable] 3 public class HogeHoge 4 { 5 public string xxxxxx; 6 public string yyyyyy; 7 8 } 9 [System.Serializable] 10 public class Token 11 { 12 public string csrfToken; 13 } 14 public HogeHoge HogeHoge = new HogeHoge(); 15 public string csrftoken; 16 17HogeHoge.xxxxxx = inputField.text;//フォームに入力された値をいれる 18HogeHoge.yyyyyy = inputField2.text; 19 20string jsonhoge = JsonUtility.ToJson(HogeHoge);// 21var ReturnShosai = StartCoroutine(Post("https://exemple.com/index, jsonhoge)); 22 23//上記の関数 24 private IEnumerator Post(string url, string bodyJsonString) 25 { 26 //トークン取得 27 var getrequest = UnityEngine.Networking.UnityWebRequest.Get(url); 28 //通信待ち 29 yield return getrequest.SendWebRequest(); 30 31 if (getrequest.isHttpError || getrequest.isNetworkError) 32 { 33 print(getrequest.error); 34 } 35 else 36 { 37 //結果(トークンを取得できたら) 38 string jsonstr = getrequest.downloadHandler.text; 39 Token token = JsonUtility.FromJson<Token>(jsonstr); 40 csrftoken = token.csrfToken; 41 42 //POSTリクエスト 43 var request = new UnityWebRequest(url, "POST"); 44 byte[] postData = Encoding.UTF8.GetBytes(bodyJsonString); 45 request.uploadHandler = (UploadHandler)new UploadHandlerRaw(postData); 46 request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer(); 47 request.SetRequestHeader("Content-Type", "application/json"); 48 request.SetRequestHeader("X-CSRF-TOKEN", csrftoken); 49 request.SetRequestHeader("Cookie", "csrfToken=" + csrftoken); 50 yield return request.SendWebRequest(); 51 } 52 } 53 54
cakephp側
php
1namespace App\Controller; 2 3use App\Controller\AppController; 4use Cake\ORM\TableRegistry; 5 6class AbcController extends AppController 7{ 8 9 public function initialize(){ 10 //必要なコンポネート等呼出 11 } 12 //unityよりGETもしくはPOSTがきたら下記 13 public function index(){ 14 $this->autoRender = false;//レタリング機能オフ 15 if (!$this->request->isPost()) { 16 //getの値を取得 17 $OutputData = $this->request->getCookieParams(); 18 }else { 19 //POST受信※jsonで受け取りデコード 20 $PostList = file_get_contents("php://input"); 21 $DecodePostList = json_decode($PostList); 22 23 //ポストを受け取って処理を実行・・・・・ 24 $OutputData = $hogehoge;//処理が完了し値をいれる 25 } 26 //jsonでunity側へ送る。 27 $this->response->body(json_encode($OutputData)); 28 } 29
よろしくお願いします。
あなたの回答
tips
プレビュー