关于unity3d:UnityWebRequest POST到PHP不起作用

UnityWebRequest POST to PHP not work

我将文档与WWWForm一起使用:https://docs.unity3d.com/Manual/UnityWebRequest-SendingForm.html

C#:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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:

1
2
3
4
5
6
7
8
9
10
11
<?php

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

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

?>

响应(MULTIPART和WWWForm):

1
2
3
4
5
6
7
8
9
10
POST: Array
(
)
array(0) {
}
GET: Array
(
)
array(0) {
}

$ _POST为空...(这是我的问题)

使用Unity 2017.3。

我以前使用过UnityWebRequest.Send(Unity 5.6),它对我一直有效,直到过时。

谢谢。


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

1
2
3
4
5
UnityWebRequest www = UnityWebRequest.Post(url, formData);

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

yield return www.SendWebRequest();


现在,我正在尝试相同的操作,由于在下一版本中将不赞成使用WWW类和WWWForm,所以我试图找到一种不使用不赞成使用的类的解决方案。
最后,我了解到,如果您只需要发送带有字符串的表单,则实际上并不需要使用List(例如,现在我将其用于Dropbox中用于代码流身份验证的http帖子)。
只需使用Dictionary,就可以了(您甚至不需要使用www.chunkedTransfer = false;)。

1
2
3
4
5
6
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 + '/');

我尝试了上述所有答案,但没有任何效果,但是我注意到,Unity添加了一个Request Header:

1
upgrade-insecure-requests  1

所以我将网址升级为https://

它仍然不能与MultipartFormData一起使用,但是它开始与WWWForm form = new WWWForm();一起使用


请改用WWWForm。 PHP期望使用application / x-www-form-urlencoded表单数据,而不是多部分。

1
2
3
4
WWWForm form = new WWWForm();
form.AddField("myField","myData");

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