try健身 服务器响应超时,连续10个请求后的httpwebrequest超时

在VB.NET编写的一个Windows窗体应用中,作者遇到了一个网络爬虫的问题。爬虫在连续抓取10个页面后,每个后续请求都会超时。尽管尝试了增加连接限制、禁用KeepAlive和设置请求超时,但问题依然存在。在每次请求之间增加了延迟以避免看起来像DoS攻击,但问题并未解决。作者怀疑可能是由于未正确关闭或处置某些对象导致的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在为一个特定的网站写一个网络爬虫。该应用程序是一个VB.NET Windows窗体应用程序,它是

使用多线程-每个Web请求都是连续的。但是,在成功地检索了10个页面之后,每个连续的请求都超时。

我已经回顾了在这里发布的类似问题,并在getpage例程中实现了推荐的技术,如下所示:

Public Function GetPage(ByVal url As String) As String

Dim result As String = String.Empty

Dim uri As New Uri(url)

Dim sp As ServicePoint = ServicePointManager.FindServicePoint(uri)

sp.ConnectionLimit = 100

Dim request As HttpWebRequest = WebRequest.Create(uri)

request.KeepAlive = False

request.Timeout = 15000

Try

Using response As HttpWebResponse = DirectCast(request.GetResponse, HttpWebResponse)

Using dataStream As Stream = response.GetResponseStream()

Using reader As New StreamReader(dataStream)

If response.StatusCode <> HttpStatusCode.OK Then

Throw New Exception("Got response status code: " + response.StatusCode)

End If

result = reader.ReadToEnd()

End Using

End Using

response.Close()

End Using

Catch ex As Exception

Dim msg As String = "Error reading page """ & url & """. " & ex.Message

Logger.LogMessage(msg, LogOutputLevel.Diagnostics)

End Try

Return result

End Function

我错过什么了吗?我是否没有关闭或处置一个应该关闭或处置的对象?奇怪的是,它总是发生在连续10个请求之后。

笔记:

在这个方法所在的类的构造函数中,我有以下内容:

ServicePointManager.DefaultConnectionLimit=100

如果我将keepalive设置为true,则超时将在五个请求之后开始。

所有请求都针对同一域中的页面。

编辑

我在每个Web请求之间添加了两到七秒的延迟,这样我就不会看起来像是在“锤击”站点或试图进行DoS攻击。但是,问题仍然存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值