Сделайте HTTP-сообщение в .NET (Vb) со сжатыми данными, используя deflatestream

Данные, которые я публикую с клиента VB.Net, велики, и я хочу их сжать. Я хочу сделать «POST», а сервер apache поддерживает mod_deflate. Я пытаюсь интегрировать DeflateStream в свой почтовый код, но, похоже, это не работает.

Я могу отправить данные без сжатия, используя стандартный код.

    request.ContentType = "application/x-www-form-urlencoded"

    Dim dataStream As Stream = request.GetRequestStream()
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(strEncodedXML)
    request.ContentType = "application/x-www-form-urlencoded"
    request.ContentLength = byteArray.Length
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()
    Dim response As WebResponse = request.GetResponse()

Однако я не уверен, как добавить сжатие с помощью Deflate Stream. Мое лучшее предположение заключается в следующем, однако я не думаю, что это работает.

    request.Headers.Add("Content-Encoding", "deflate")
    request.ContentType = "application/x-www-form-urlencoded"

    Dim dataStream As Stream = request.GetRequestStream()
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(strEncodedXML)
    Dim compress As New DeflateStream(dataStream, CompressionMode.Compress, True)
    request.ContentType = "application/x-www-form-urlencoded"
    request.ContentLength = byteArray.Length
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()
    Dim response As WebResponse = request.GetResponse()

Вопросы.

  1. Должен ли я отправлять ContentLength сжатого потока, если да, то как мне это получить.
  2. Должен ли я писать в поток данных или сжимать?
  3. Это то, как вы используете DataStream и DeflateStram вместе?
  4. На стороне сервера, учитывая, что apache автоматически обрабатывает раздувание, откуда мне знать, что он работает (пока что я знаю, что между двумя методами, использованными выше, нет экономии времени на моих сообщениях).

person Brian    schedule 17.02.2010    source источник
comment
Почему вы думаете, что это не работает?   -  person C. Ross    schedule 26.11.2010


Ответы (1)


Этот вопрос содержит код, который упаковывает запрос (который неявно отвечает на ваши Q1, Q2 и Q3).

Q4: Используйте сниффер для проверки данных, отправляемых по сети. Fiddler2 бесплатен и очень прост в установке и использовании.

Ответы на связанный вопрос объясняют, почему mod_deflate не будет вашим другом в отношении сжатия запроса.

person Serge Wautier    schedule 17.02.2010