Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UnityWebRequest POST to PHP not work

I use documentation with 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 );

?>

Response (MULTIPART and WWWForm):

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

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

Use Unity 2017.3.

I used UnityWebRequest.Send (Unity 5.6) before and it worked for me until it became obsolete.

Thanks.

like image 287
Sergey Avatar asked Aug 23 '26 13:08

Sergey


2 Answers

This seems to work for me, I hope it helps.

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

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

yield return www.SendWebRequest();
like image 76
Neeraj Jaiswal Avatar answered Aug 25 '26 03:08

Neeraj Jaiswal


Right now I'm trying the same thing and since WWW class and WWWForm will be deprecated in the next version I tried to found a solution to this problem that does not use the deprecated class. In the end I understand that you don't actually need to use List if you just need to send a form with strings (example, right now I'm using it for a http post for code-flow auth in dropbox). Just use a Dictionary and you'll be fine (you will not even need to use 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 + '/');
like image 25
LiefLayer Avatar answered Aug 25 '26 02:08

LiefLayer



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!