Unity Web请求发布未发送数据

时间:2019-08-20 11:08:20

标签: c# php unity3d

Unity 2019.2.1f1

我已经研究了尽可能多的其他解决方案,但似乎没有一个解决我的问题。

使用UnityWebRequest或WWW将WWWForm发送到php时,永远不会读取表单数据。

这是我使用UnityWebRequest的C#代码:

    WWWForm formData = new WWWForm ();
    formData.AddField ("firstname", "firstname");

    UnityWebRequest www = UnityWebRequest.Post (URL, formData);
    //www.chunkedTransfer = false; //<- Tested with this on and off and no difference
    yield return www.SendWebRequest ();

    if (www.isNetworkError || www.isHttpError)
    {
        Debug.Log (www.error);
    }
    else
    {
        Debug.Log ("Form upload complete!");
        Debug.Log (www.downloadHandler.text);
    }

这是PHP文件的样子:

<?php
    $firstname = $_POST['firstname'];
    echo "HELLO".$firstname."!!!!";
?>

我也尝试使用WWW的旧方法:

    WWWForm formData = new WWWForm ();
    formData.AddField ("firstname", "firstname");
    WWW www = new WWW("http://www.connorwaplington.co.uk/test.php",formData);
    yield return www;
    Debug.Log (www.text);

我从所有这些输出中获得的输出是:“ HELLO !!!!”,而不是“ HELLOfirstname !!!!”。

我已经通过从HTML文件发送表单来测试了PHP代码,并且效果很好。

3 个答案:

答案 0 :(得分:1)

尝试以下代码,并阅读this有关UnityWebRequest的Unity文档

private void Start()
{
    StartCoroutine(GetRequest(url));
}

private IEnumerator GetRequest(string uri)
{
    var formData = new WWWForm();
    formData.AddField("firstname", "firstname");

    using (var webRequest = UnityWebRequest.Post(uri, formData))
    {
        yield return webRequest.SendWebRequest();

        string[] pages = uri.Split('/');
        int page = pages.Length - 1;

        if (webRequest.isNetworkError)
        {
            Debug.Log(pages[page] + ": Error: " + webRequest.error);
        }
        else
        {
            Debug.Log(pages[page] + ":\nReceived: " + webRequest.downloadHandler.text);
        }
    }
}

Result

答案 1 :(得分:0)

感谢所有对此提供帮助的人,您的所有答案都是正确的。 URL必须是HTTPS而不是HTTP。我的坏事:/

答案 2 :(得分:0)

我复制了您的代码并执行了以下操作:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class pp : MonoBehaviour
{

    bool runReuqest = true;
    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
        if (runReuqest)
            StartCoroutine("runRquest");
    }

    IEnumerator runRquest() {
        runReuqest = false;
        // Your Code no changes
        WWWForm formData = new WWWForm();
        formData.AddField("firstname", "firstname");

        UnityWebRequest www = UnityWebRequest.Post("http://my-ip/j.php", formData);
        //www.chunkedTransfer = false; //<- Tested with this on and off and no difference
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError) {
            Debug.Log(www.error);
        } else {
            Debug.Log("Form upload complete!");
            Debug.Log(www.downloadHandler.text);
        }
    }
}

我得到的日志如下:

Log:
Form upload complete!
UnityEngine.Debug:Log(Object)

HELLOfirstname!!!!
UnityEngine.Debug:Log(Object)

检查你的代码是否在某处搞砸了,或者使用上面的作为指导。

编辑 1 我没有去检查以前的答案,但它似乎对我也有用。 j.php: 收到:HELLOfirstname!!!!

您可能遗漏了其他东西。