相关文章推荐
稳重的匕首  ·  ThreadStart Delegate ...·  9 月前    · 
慈祥的仙人掌  ·  c++ string class ...·  1 年前    · 
潇洒的香瓜  ·  node.js - ...·  1 年前    · 
发呆的面包  ·  iOS 16 ...·  1 年前    · 
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<byte> btl = new List<byte>();
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<byte>,并转成Stream对象,这个时候,就可以继续下去了,不会再出现远程主机强迫关闭的情况了

HttpWebRequest http = (HttpWebRequest)WebRequest.Create(full_url);HttpWebResponse hwr = (HttpWebResponse)http.GetResponse();Stream s = hwr.GetResponseStream();MemoryStream ms = new MemoryStream();...
服务端Nhibernate 3.0+wcf ,客户端在调用的时候,如果查询 涉及到关联查询,不管是一对多还是多对一,都会 报错误: 无法 传输 连接 读取数据 : 远程 主机 强迫 关闭 一个 现有 连接 。这个错误很难判断错在哪里,刚开始时是怀疑查询超时,修改配置文件之后 问题 依旧。 服务端控制台打印sql语句显示查询是完成了的,网上查了大多数是说序列化的 问题 ,修改配置文件 的序列化最大值,翻了几个老外的bl...
SmtpClient 通过Office365邮箱发送邮件报错“System.IO.IOException: 无法 传输 连接 读取数据 : net_io_connectionclosed。”
fiddle突然抓不了包了,无论是尝试抓浏览器还是移动端,都失败。错误提示如下 20:17:41:8842 !SecureClientPipeDirect failed: System.IO.IOException 无法 传输 连接 读取数据 : 远程 主机 强迫 关闭 一个 现有 连接 。。 < 远程 主机 强迫 关闭 一个 现有 连接 。 for pipe (CN=.tianyancha.com, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com)