Сделать HTTP Post в .NET (Vb) со сжатыми данными, используя deflatestream - PullRequest
1 голос
/ 17 февраля 2010

Данные, которые я отправляю с клиента 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 of Compressed Поток, если так, как я могу получить это.
  2. Должен ли я писать в поток данных или сжать?
  3. Это то, как вы используете DataStream и DeflateStram все вместе?
  4. На стороне сервера, учитывая, что apache автоматически должен обрабатывать раздувание, как мне это сделать? знаю, что это работает (пока я знаю, что нет раз экономии на моем сообщения между двумя используемыми методами выше).

1 Ответ

0 голосов
/ 17 февраля 2010

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

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

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

...