UnityWebRequest POST到PHP不起作用

问题描述 投票:3回答:3

我使用WWWForm的文档:https://docs.unity3d.com/Manual/UnityWebRequest-SendingForm.html

C#:

void Start() {
    StartCoroutine(Upload());
}

IEnumerator Upload(){
    yield return Upload1();
    yield return Upload2();
}

IEnumerator Upload1() {
    List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
    formData.Add( new MultipartFormDataSection("field1=foo&field2=bar") );
    //formData.Add( new MultipartFormFileSection("my file data", "myfile.txt") );

    UnityWebRequest www = UnityWebRequest.Post(url, formData);
    yield return www.SendWebRequest();

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

IEnumerator Upload2() {
    WWWForm form = new WWWForm();
    form.AddField("myField", "myData");

    UnityWebRequest www = UnityWebRequest.Post(url, form);
    yield return www.SendWebRequest();

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

PHP:

<?php 

    echo "POST: ";
    print_r( $_POST );
    var_dump( $_POST );

    echo "GET: ";
    print_r( $_GET );
    var_dump( $_GET );

?>

响应(MULTIPART和WWWForm):

POST: Array
(
)
array(0) {
}
GET: Array
(
)
array(0) {
}

$_POST is empty... (that's my problem)

使用Unity 2017.3。

之前我使用过UnityWebRequest.Send(Unity 5.6),它对我起作用,直到它变得过时。

谢谢。

php unity3d post webrequest
3个回答
6
投票

这似乎对我有用,我希望它有所帮助。

UnityWebRequest www = UnityWebRequest.Post(url, formData);

www.chunkedTransfer = false;////ADD THIS LINE

yield return www.SendWebRequest();

0
投票

请改用WWWForm。 PHP期待application / x-www-form-urlencoded表单数据,而不是multipart。

WWWForm form = new WWWForm();
form.AddField("myField", "myData");

UnityWebRequest www = UnityWebRequest.Post(url, form);

0
投票

现在我正在尝试相同的事情,因为WWW类和WWWForm将在下一个版本中被弃用,我试图找到一个不使用弃用类的问题的解决方案。最后我明白,如果你只需要发送一个包含字符串的表单,你实际上并不需要使用List(例如,现在我正在使用它作为dropbox中的代码流auth的http帖子)。只需使用字典就可以了(你甚至不需要使用www.chunkedTransfer = false;)。

Dictionary<string, string> form = new Dictionary<string, string>();
form.Add("code", token);
form.Add("grant_type", "authorization_code");
form.Add("client_id", myid);
form.Add("client_secret", mysecret);
form.Add("redirect_uri", "http://" + localhost + ":" + port + '/');
© www.soinside.com 2019 - 2024. All rights reserved.