无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接,并不是真的关闭连接,而是数据读取问题

您所在的位置:网站首页 调用的目标发生了异常,请检查网络连接 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接,并不是真的关闭连接,而是数据读取问题

无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接,并不是真的关闭连接,而是数据读取问题

2024-07-02 02:10| 来源: 网络整理| 查看: 265

HttpWebRequest http = (HttpWebRequest)WebRequest.Create(full_url); HttpWebResponse hwr = (HttpWebResponse)http.GetResponse(); Stream s = hwr.GetResponseStream(); MemoryStream ms = new MemoryStream(); s.CopyTo(ms); byte[] bt = ms.ToArray(); string html = System.Text.Encoding.UTF8.GetString(bt);

以上是最简约的c#采集代码,但是,最近采集一些站点内容时,发现经常有提示“无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接”,而且也不是每次都这样,这就很奇怪了啊

我相信既然能正常采集一次,那么在没有触发防采集机制之前,且采集目标没有崩溃的情况下,不应该有其它应答出现,比如这个远程主机强迫关闭连接

而这个错误通过跟踪,可以看到,是出现在s.CopyTo(ms)时发生的,那么,Stream s = hwr.GetResponseStream()是获取成功的

那么,我们换一个写法,不用CopyTo这个方法了,用最笨的办法,直接对s进行ReadByte好了

HttpWebRequest http = (HttpWebRequest)WebRequest.Create(full_url); HttpWebResponse hwr = (HttpWebResponse)http.GetResponse(); Stream grs = hwr.GetResponseStream(); List btl = new List(); while (true) { int nb = grs.ReadByte(); if (nb == -1) { break; }else { btl.Add((byte)nb); } } Stream s = new MemoryStream(btl.ToArray()); MemoryStream ms = new MemoryStream(); s.CopyTo(ms); byte[] bt = ms.ToArray(); string html = System.Text.Encoding.UTF8.GetString(bt);

通过ReadByte,生成一个List,并转成Stream对象,这个时候,就可以继续下去了,不会再出现远程主机强迫关闭的情况了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3