Я использую документацию с 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) {
}
Используйте Unity 2017.3.
Я использовал UnityWebRequest.Send (Unity 5.6) раньше, и он работал для меня, пока не стал устаревшим.
Благодарю.
Кажется, это работает для меня, я надеюсь, что это помогает.
UnityWebRequest www = UnityWebRequest.Post(url, formData);
www.chunkedTransfer = false;////ADD THIS LINE
yield return www.SendWebRequest();
Вместо этого используйте WWWForm. PHP ожидает данные формы application / x-www-form-urlencoded, а не multipart.
WWWForm form = new WWWForm();
form.AddField("myField", "myData");
UnityWebRequest www = UnityWebRequest.Post(url, form);
Прямо сейчас я пытаюсь сделать то же самое, и поскольку в следующей версии класс WWW и WWWForm устаревают, я попытался найти решение этой проблемы, в котором не используется устаревший класс.
В конце концов, я понимаю, что на самом деле вам не нужно использовать List, если вам просто нужно отправить форму со строками (например, сейчас я использую ее для сообщения http для аутентификации потока кода в dropbox).
Просто используйте словарь, и все будет в порядке (вам даже не нужно использовать 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 + '/');