# \[Unity API\] Why doesn't UnityWebRequest support byte array post data?

**URL:** https://discussions.unity.com/t/unity-api-why-doesnt-unitywebrequest-support-byte-array-post-data/636279
**Category:** Scripting
**Tags:** Scripting
**Created:** [August 12, 2016, 8:07am UTC](https://discussions.unity.com/t/unity-api-why-doesnt-unitywebrequest-support-byte-array-post-data/636279 "2016-08-12T08:07:18Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![jehovah0121qq](https://avatars.discourse-cdn.com/v4/letter/j/f1d935/32.png) [@jehovah0121qq](https://discussions.unity.com/u/jehovah0121qq)
#### Post date: [August 12, 2016, 8:07am UTC](https://discussions.unity.com/t/unity-api-why-doesnt-unitywebrequest-support-byte-array-post-data/636279/1 "2016-08-12T08:07:18Z")

</div>

We know that `WWW` has a contructor with a `byte[ ]` parameter as the post data, and it’s quite handy to deal with encoding senstive servers. Why doesn’t `UnityWebRequest.Post` has a similar overload? I know the string post data version but it’ll cause our Django server to complain.

---

<div class="post-metadata">

### Author: ![tonemcbride](https://dub1.discourse-cdn.com/unity/user_avatar/discussions.unity.com/tonemcbride/32/373210_2.png) [@tonemcbride](https://discussions.unity.com/u/tonemcbride)
#### Post date: [August 12, 2016, 10:52am UTC](https://discussions.unity.com/t/unity-api-why-doesnt-unitywebrequest-support-byte-array-post-data/636279/2 "2016-08-12T10:52:25Z")

</div>

I think you can do something like this:

```csharp
byte[] ByteArray;

UnityWebRequest WebRequest = new UnityWebRequest( URL , UnityWebRequest.kHttpVerbPOST );
UploadHandlerRaw MyUploadHandler = new UploadHandlerRaw( ByteArray );
MyUploadHandler.contentType= "application/x-www-form-urlencoded"; // might work with 'multipart/form-data'
WebRequest.uploadHandler= MyUploadHandler;

```

---

<div class="post-metadata">

### Author: ![jehovah0121qq](https://avatars.discourse-cdn.com/v4/letter/j/f1d935/32.png) [@jehovah0121qq](https://discussions.unity.com/u/jehovah0121qq)
#### Post date: [August 12, 2016, 10:56am UTC](https://discussions.unity.com/t/unity-api-why-doesnt-unitywebrequest-support-byte-array-post-data/636279/3 "2016-08-12T10:56:03Z")

</div>

> [@tonemcbride](#):
>
> I think you can do something like this:
> 
> ```csharp
> byte[] ByteArray;
> 
> UnityWebRequest WebRequest = new UnityWebRequest( URL , UnityWebRequest.kHttpVerbPOST );
> UploadHandlerRaw MyUploadHandler = new UploadHandlerRaw( ByteArray );
> MyUploadHandler.contentType= "application/x-www-form-urlencoded"; // might work with 'multipart/form-data'
> WebRequest.uploadHandler= MyUploadHandler;
> 
> ```

Thanks for your answer. Yup, we can use this, but this doesn’t smell good.

---

<div class="post-metadata">

### Author: ![MV10](https://dub1.discourse-cdn.com/unity/user_avatar/discussions.unity.com/mv10/32/453727_2.png) [@MV10](https://discussions.unity.com/u/MV10)
#### Post date: [August 12, 2016, 12:06pm UTC](https://discussions.unity.com/t/unity-api-why-doesnt-unitywebrequest-support-byte-array-post-data/636279/4 "2016-08-12T12:06:16Z")

</div>

System.Text has string encoders built-in:

UnicodeEncoding.Unicode.GetString(bytearray)

Same for ASCII, UTF8, UTF32, etc. …

Set up the handler as a PUT, apply the message body, change the method to a POST and Unity won’t auto-mangle the content.

---

<div class="post-metadata">

### Author: ![jehovah0121qq](https://avatars.discourse-cdn.com/v4/letter/j/f1d935/32.png) [@jehovah0121qq](https://discussions.unity.com/u/jehovah0121qq)
#### Post date: [August 29, 2016, 3:01am UTC](https://discussions.unity.com/t/unity-api-why-doesnt-unitywebrequest-support-byte-array-post-data/636279/5 "2016-08-29T03:01:51Z")

</div>

> [@MV10](#):
>
> System.Text has string encoders built-in:
> 
> UnicodeEncoding.Unicode.GetString(bytearray)
> 
> Same for ASCII, UTF8, UTF32, etc. …
> 
> Set up the handler as a PUT, apply the message body, change the method to a POST and Unity won’t auto-mangle the content.

Thanks. It seems WWWForm instead of WWWForm.data work for us.

---

<div class="post-metadata">

### Author: ![asperov](https://avatars.discourse-cdn.com/v4/letter/a/c0e974/32.png) [@asperov](https://discussions.unity.com/u/asperov)
#### Post date: [September 3, 2019, 12:48pm UTC](https://discussions.unity.com/t/unity-api-why-doesnt-unitywebrequest-support-byte-array-post-data/636279/6 "2019-09-03T12:48:41Z")

</div>

> [@jehovah0121qq](#):
>
> We know that `WWW` has a contructor with a `byte[ ]` parameter as the post data, and it’s quite handy to deal with encoding senstive servers. Why doesn’t `UnityWebRequest.Post` has a similar overload? I know the string post data version but it’ll cause our Django server to complain.

Actualy you can!

using (UnityWebRequest www = new UnityWebRequest(markerURL))  
{  
yield return www;

byte[&nbsp;] yourBytes = [www.downloadHandler.data;](http://www.downloadHandler.data;)

---

<div class="post-metadata">

### Author: ![lvovturntoplay](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@lvovturntoplay](https://discussions.unity.com/u/lvovturntoplay)
#### Post date: [September 3, 2019, 12:51pm UTC](https://discussions.unity.com/t/unity-api-why-doesnt-unitywebrequest-support-byte-array-post-data/636279/7 "2019-09-03T12:51:54Z")

</div>

> [@jehovah0121qq](#):
>
> We know that `WWW` has a contructor with a `byte[ ]` parameter as the post data, and it’s quite handy to deal with encoding senstive servers. Why doesn’t `UnityWebRequest.Post` has a similar overload? I know the string post data version but it’ll cause our Django server to complain.

You can.

string pathToImage = null;

using (UnityWebRequest www = new UnityWebRequest(markerURL))  
{  
yield return www;

byte[&nbsp;] yourBytes = [www.downloadHandler.data;](http://www.downloadHandler.data;)

pathToImageC = Application.persistentDataPath + “/” + f\_type;

if (!Directory.Exists(Path.GetDirectoryName(pathToImageC)))  
Directory.CreateDirectory(Path.GetDirectoryName(pathToImageC));  
else  
{  
Directory.Delete(pathToImageC);  
Directory.CreateDirectory(Path.GetDirectoryName(pathToImageC));  
}  
System.IO.File.WriteAllBytes(pathToImageC, yourBytes);  
}
