2015-11-13 2 views
2

Я пытаюсь получить поток данных с HttpClient, но что-то странное происходит с HttpResponseMessage. Я возвращаюсь.Почему заголовки содержимого httpresponsemessage не добавлены в правильное поле?

Как я отправить запрос, как это:

_webClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, _webClient.BaseAddress + connectionSuffix), HttpCompletionOption.ResponseHeadersRead); 

Однако в ответ в ContentHeaders не заполнены так, как я бы ожидать, что они будут. Вот пример: ответ содержит заголовок Content-Type, но его значение не может быть найдено в поле ContentType, только в общем Заголовки перечислимые. visualstudio

Анализ потока пакетов в Wireshark дает мне следующее:

GET /video.cgi HTTP/1.1 Авторизация: Basic YWRtaW46 Ведущий: 192.168.0.150 Connection: Keep-Alive

Ответил с:

HT TP/1.0 200 OK Сервер: Веб-сервер камеры/1.0 Автор: Steven Wu MIME-версия: 1.0 Cache-Control: no-cache Content-Type: multipart/x-mixed-replace; border = - video boundary--

это не конец света, я после граничного параметра, и я могу найти его в общих заголовках поля. Но я не могу не задаться вопросом: это намеренное поведение? Я не могу найти какую-либо информацию о Получение заголовков, только о том, как добавить их в запрос (это другое дело).

+0

Можете ли вы проверить ответ, используя такой инструмент, как Fiddler2? –

+0

@OguzOzgul Я уже проверил ответ через Wireshark. Устройство отправляет правильный ответ.Я включил его в исходный вопрос. –

+0

Это интересно, и я думаю, что CompletionOption играет здесь определенную роль. Почему бы вам не спросить об этом на сайте connect.microsoft.com? –

ответ

1

Анализ этого заголовка невозможен из-за пробела в значении параметра границы ,

Это не соответствует RFC2616, поскольку RFC заявляет в Section 2, что значения параметра заголовка не должны содержать пробелы или они должны быть указаны как строки Qouted.

Либо изменить границу для

boundary=--videoboundary-- 

или

boundary="--video boundary--" 

и она работает.

Примечание: вы должны удалить Qout при чтении значения для последнего.

Из RFC, Раздел 2: (LWS = Linear White Space)

Many HTTP/1.1 header field values consist of words separated by LWS or 
special characters. These special characters MUST be in a quoted string 
to be used within a parameter value (as defined in section 3.6). 
+0

Спасибо за ваш ответ! Думаю, мне просто придется разобраться с этим, так как я не могу изменить программное обеспечение на другом устройстве, которое выбирает границу. –

+0

Да. Гарантия не охватывает такие проблемы, которые я предполагаю. :) Но по крайней мере вы можете сообщить об этом производителю. –