如果Content-Length是67722,则HttpWebResponse没有得到完整响应

时间:2016-04-27 10:54:32

标签: c# winforms httpwebrequest

在我的代码中,我正在下面

HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse();
Stream dataStream = response.GetResponseStream();

string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();

httpWebRequest是一个POST请求,在一次重定向后其在Fiddler中的响应大小为67722.在我的情况下返回的response.ContentLength字段为-1,总大小为responseFromServer大约为32695.只需从响应中删除剩余数据。我已经看到某处使用maxReceivedMessageSize,但无法确定如何使用它。

  

responseFromServer.Length 32695

     

response.ContentLength -1

     

response.GetResponseHeader(“transfer-encoding”)“”

更新:最终

回应正确。问题在于我的代码,其中发送到POST查询的参数未通过UrlEncoding正确编码。如果我们正在处理ASP.net contentpanel control,请记住它是使用具有特殊字符'$'的控件名称发送POST查询。我们需要使用HttpUtility.UrlEncoding方法

对其进行编码

1 个答案:

答案 0 :(得分:0)

正如消费者所提到的,检查响应标题......' ContentLength'在响应头中提供,可能不是实际的数据长度;如果转移编码被“分块”,那就是"正常"将contentlength标记为-1。

我不熟悉fiddler ..但也许它正在抓取webresponse不是的东西,就像外部脚本一样?尝试在普通的网络浏览器中加载页面,然后查看来源' - >使用一些工具(文本框..)来计算源中的字符:它实际上是67k还是更接近32?同样,检查' responseFromServer'中的数据的最后一部分是否与查看页面来源'?时相同?即。两者都可能(希望?)< / h t m l>