Передача двоичных данных через HttpWebRequest - PullRequest
4 голосов
/ 18 января 2012

Используя .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 ]

5 голосов
/ 18 января 2012

Если вы записываете свои данные в поток через HttpWebRequest.GetRequestStream, вы будете отправлять чистые двоичные данные без какого-либо преобразования в base64.Вам придется анализировать данные на принимающей стороне как двоичный поток.

В качестве примечания, я бы также всегда держался в стороне от base64 при отправке данных по сети, потому что это увеличит вашу пропускную способность для передачи данных.На каждые 3 байта, которые вы конвертируете в base64, будет получено 4. Таким образом, у вас есть 33% накладных расходов для всех ваших данных.

РЕДАКТИРОВАТЬ: здесь мы углубимся в Hellfrost.HttpWebRequest.GetRequestStream обеспечивает более низкий уровень доступа к потоку, что, в свою очередь, позволяет отправлять двоичные данные по соединению.Если вы пытаетесь отправить данные на веб-сервер, я бы посоветовал вам посмотреть пост-данные и multipart/form-data.Подробнее об этом можно прочитать здесь: Загрузка файлов с помощью HTTPWebrequest (multipart / form-data)

0 голосов
/ 18 января 2012

Потоки чтения и записи в двоичном формате.GetRequestStream возвращает поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...