我尝试使用HttpClient
来获取数据流,但HttpResponseMessage
我回来时发生了奇怪的事情。
我发送请求的方式如下:
_webClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, _webClient.BaseAddress + connectionSuffix), HttpCompletionOption.ResponseHeadersRead);
然而,响应的 ContentHeaders 并没有像我期望的那样填充。以下是一个示例:响应包含内容类型标题,但它的值不能在 ContentType 字段中找到,仅在通用的 Headers 中可枚举。
分析Wireshark中的数据包流程给出了以下内容:
GET /video.cgi HTTP / 1.1 授权:基本YWRtaW46 主持人:192.168.0.150 连接:Keep-Alive
回答:
HTTP / 1.0 200 OK 服务器:Camera Web Server / 1.0 Auther:Steven Wu MIME版本:1.0 缓存控制:无缓存 Content-Type:multipart / x-mixed-replace; boundary = - video boundary -
这不是世界末日,我在边界参数之后,我可以在通用标题字段中找到它。但我不禁要问:这是预期的行为吗?我似乎无法找到有关获取标头的任何信息,只是关于如何将它们添加到请求中(这是另一回事)
答案 0 :(得分:1)
由于边界参数值中的空格,解析此标头失败。
这不符合RFC2616,因为RFC在Section 2中声明标头参数值不能包含空格,或者它们应指定为qouted字符串。
将边界更改为
boundary=--videoboundary--
或
boundary="--video boundary--"
它有效。
注意:您应该在读取后者的值时删除qoutes。
来自RFC,第2节:( LWS =线性空格)
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).