use*_*551 0 c# httpwebrequest content-length
我需要获取内容长度,以告诉我的应用程序缓冲区结束的位置.问题是httpwebresponse.ContentLength返回-1,即使在响应中显示Content-Length标头.
然后我虽然我要读实际的标题来找出长度.我正在测试的页面返回的Content-Length是1646.一个HTTP嗅探器声称我收到了1900个字节,所以我假设差异是标题长度.然后我从响应中复制了整个身体并将其粘贴到在线strlen网站上,体型实际上是1850!
这怎么可能?为什么响应返回无效的内容长度,为什么httpwebrequest.ContentLength返回-1?如何在收到响应之前计算实际响应长度?
编辑:这是我用来获得响应的代码:
using (System.IO.Stream responseStream = hwresponse.GetResponseStream())
{
using (MemoryStream memoryStream = new MemoryStream())
{
int count = 0;
do
{
count = responseStream.Read(buffer, 0, buffer.Length);
TCP_R.SendBytes(buffer);
} while (count != 0);
}
}
byte[] PACKET_END_IDENTIFIER = { 0x8, 0x01, 0x8, 0x1, 0x8 };
TCP_R.SendBytes(PACKET_END_IDENTIFIER);
TCP_R.Close();
Run Code Online (Sandbox Code Playgroud)
我有一个代理服务器应用程序接收请求,将其发送到另一个应用程序(我的客户端)客户端执行请求并使用TCP_R类返回结果.当服务器从客户端获得响应时,它会将响应返回给浏览器.
每次我做一个请求,我得到所有的数据+额外的垃圾,这是一个例子:
<tag1><tag2><tag3> ag3>
Run Code Online (Sandbox Code Playgroud)
ag3>是垃圾数据,它就像缓冲区的结尾被切断并再次添加.它显示客户端响应有效响应,垃圾数据添加onDataRecieve事件..任何提示?谢谢!
-1不是ContentLength属性的无效值.我假设你的意思是响应的ContentLength属性是-1 ...询问请求长度是非感性的.即使这样,它也完全有效:
ContentLength属性包含随响应返回的Content-Length标头的值.如果未在响应中设置Content-Length标头,则ContentLength将设置为值-1.
如果体长是1850,那表明它使用的是分块传输编码.但这对您来说应该是透明的 - 只需继续阅读响应流直到结束.如果你使用的是.NET 4,那就很简单 - 只需创建一个MemoryStream并使用Stream.CopyTo将数据复制到那里MemoryStream.
| 归档时间: |
|
| 查看次数: |
4387 次 |
| 最近记录: |