通过HttpWebRequest传递二进制数据

时间:2012-01-18 13:58:34

标签: c# .net http networking httpwebrequest

使用.Net,我想通过HttpWebRequest传递一些二进制数据(一些序列化对象)。

我可以将它放在请求流上,还是需要将其编码为base64字符串?

我的意思是,如果我有:

byte[] data = new byte[1000];
GetSomeStrangeData(data);

我是否需要使用Convert.ToBase64String或者我可以将它从HttpWebRequest.GetRequestStream写入流中吗?


后人:

http://tools.ietf.org/html/rfc2616

http://msdn.microsoft.com/en-us/library/d4cek6cc.aspx

http://www.wireshark.org/

http://www.fiddler2.com

2 个答案:

答案 0 :(得分:5)

如果您通过HttpWebRequest.GetRequestStream将数据写入流中,您将发送纯二进制数据而不对base64进行任何转换。您必须将接收端的数据解析为二进制流。

作为旁注,在通过网络发送数据时,我也总是避开base64,因为它会增加传输数据的带宽。对于转换为base64的每3个字节,将会出现4.因此,您的所有数据都有33%的开销。

编辑:在这里为Hellfrost进一步深入探讨。 HttpWebRequest.GetRequestStream允许您对流进行较低级别的访问,从而允许您通过连接发送二进制数据。如果您尝试将数据发送到网络服务器,我建议您查看后期数据和multipart/form-data。您可以在此处详细了解:Upload files with HTTPWebrequest (multipart/form-data)

答案 1 :(得分:0)

Streams读写二进制文件。 GetRequestStream返回一个Stream。