UnityWebRequest POST 到 PHP 不工作
UnityWebRequest POST to PHP not work
我使用 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 是空的...(这是我的问题)
使用 Unity 2017.3。
我以前用过 UnityWebRequest.Send (Unity 5.6),它一直对我有用,直到它过时了。
谢谢。
改为使用 WWWForm。 PHP 需要 application/x-www-form-urlencoded 表单数据,而不是多部分数据。
WWWForm form = new WWWForm();
form.AddField("myField", "myData");
UnityWebRequest www = UnityWebRequest.Post(url, form);
这似乎对我有用,希望对您有所帮助。
UnityWebRequest www = UnityWebRequest.Post(url, formData);
www.chunkedTransfer = false;////ADD THIS LINE
yield return www.SendWebRequest();
现在我正在尝试同样的事情,因为 WWW class 和 WWWForm 将在下一个版本中被弃用,我试图找到一个不使用弃用的 class.
最后我明白,如果你只需要发送一个带有字符串的表单,你实际上并不需要使用 List (例如,现在我将它用于 dropbox 中的 http post 代码流身份验证).
只需使用字典就可以了(您甚至不需要使用 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 + '/');
我尝试了以上所有答案,但没有任何效果,但我注意到 Unity 添加了一个请求 Header :
upgrade-insecure-requests 1
所以我将 url 升级到 https://
它仍然无法与 MultipartFormData
一起使用,但它开始与 WWWForm form = new WWWForm();
一起使用
我使用 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 是空的...(这是我的问题)
使用 Unity 2017.3。
我以前用过 UnityWebRequest.Send (Unity 5.6),它一直对我有用,直到它过时了。
谢谢。
改为使用 WWWForm。 PHP 需要 application/x-www-form-urlencoded 表单数据,而不是多部分数据。
WWWForm form = new WWWForm();
form.AddField("myField", "myData");
UnityWebRequest www = UnityWebRequest.Post(url, form);
这似乎对我有用,希望对您有所帮助。
UnityWebRequest www = UnityWebRequest.Post(url, formData);
www.chunkedTransfer = false;////ADD THIS LINE
yield return www.SendWebRequest();
现在我正在尝试同样的事情,因为 WWW class 和 WWWForm 将在下一个版本中被弃用,我试图找到一个不使用弃用的 class. 最后我明白,如果你只需要发送一个带有字符串的表单,你实际上并不需要使用 List (例如,现在我将它用于 dropbox 中的 http post 代码流身份验证). 只需使用字典就可以了(您甚至不需要使用 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 + '/');
我尝试了以上所有答案,但没有任何效果,但我注意到 Unity 添加了一个请求 Header :
upgrade-insecure-requests 1
所以我将 url 升级到 https://
它仍然无法与 MultipartFormData
一起使用,但它开始与 WWWForm form = new WWWForm();