相关疑难解决方法(0)

使用HttpWebResponse读取"chunked"响应

使用StreamReader读取HttpWebResponse的GetResponseStream()返回的流时,我无法读取"chunked"响应:

// response is an HttpWebResponse
StreamReader reader = new StreamReader(response.GetResponseStream());
string output = reader.ReadToEnd(); // throws exception...
Run Code Online (Sandbox Code Playgroud)

reader.ReadToEnd()调用该方法时,我得到以下System.IO.IOException:无法从传输连接读取数据:连接已关闭.

当服务器返回"非分块"响应时,上面的代码工作得很好.

我能够让它工作的唯一方法是使用HTTP/1.0作为初始请求(而不是默认的HTTP/1.1),但这似乎是一种蹩脚的解决方法.

有任何想法吗?


@Chuck

你的解决方案非常好用.它仍然在最后一个Read()上抛出相同的IOExeception.但在检查StringBuilder的内容后,看起来已经收到了所有数据.所以也许我只需要在try-catch中包装Read()并吞下"错误".

c# http .net-3.5 .net-2.0

12
推荐指数
1
解决办法
2万
查看次数

DownloadString和HttpWebResponse没有返回完整的JSON内容

我试图在字符串中存储来自以下url的JSON响应.大多数情况下,我运行代码,JSON响应的最后几个字符被切断.当您在浏览器中访问该URL时,将显示完整的JSON响应.有时我的代码有效,但大多数情况下它返回部分内容.

如果我减少了我请求的网址中查询的长度,我会收到更多内容,更接近完整响应,这很奇怪.如果我完全删除查询字符串,通常会返回完整的JSON响应.问题是我想保持查询字符串不变.

我尝试了各种替代方法,包括更改编码,使用HttpWebRequest/HttpWebResponse,将响应复制到MemoryStream,使用字节缓冲区读取响应,更改协议版本等.

关于如何获得完整响应并能解释发生了什么的任何想法?谢谢!

System.Net.WebClient wc = new System.Net.WebClient();            
string data = wc.DownloadString("http://static.arcgis.com/attribution/World_Topo_Map?f=json&callback=dojo.io.script.jsonp_dojoIoScript19._jsonpCallback");
Console.Write(data);// String should end with ",-119.2]}]}]});"
Console.Read();
Run Code Online (Sandbox Code Playgroud)

.net c# webclient httpwebrequest httpwebresponse

2
推荐指数
1
解决办法
1696
查看次数