.net – 经过十次连续请求后的HttpWebRequest超时

前端之家收集整理的这篇文章主要介绍了.net – 经过十次连续请求后的HttpWebRequest超时前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为特定网站编写网络抓取工具.该应用程序是一个不使用多个线程的VB.Net Windows窗体应用程序 – 每个Web请求都是连续的.但是,在十次成功的页面检索之后,每个连续的请求都会超时.

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

  1. Public Function GetPage(ByVal url As String) As String
  2. Dim result As String = String.Empty
  3.  
  4. Dim uri As New Uri(url)
  5. Dim sp As ServicePoint = ServicePointManager.FindServicePoint(uri)
  6. sp.ConnectionLimit = 100
  7.  
  8. Dim request As HttpWebRequest = WebRequest.Create(uri)
  9. request.KeepAlive = False
  10. request.Timeout = 15000
  11.  
  12. Try
  13. Using response As HttpWebResponse = DirectCast(request.GetResponse,HttpWebResponse)
  14. Using dataStream As Stream = response.GetResponseStream()
  15. Using reader As New StreamReader(dataStream)
  16. If response.StatusCode <> HttpStatusCode.OK Then
  17. Throw New Exception("Got response status code: " + response.StatusCode)
  18. End If
  19. result = reader.ReadToEnd()
  20. End Using
  21. End Using
  22. response.Close()
  23. End Using
  24.  
  25. Catch ex As Exception
  26. Dim msg As String = "Error reading page """ & url & """. " & ex.Message
  27. Logger.LogMessage(msg,logoutputLevel.Diagnostics)
  28. End Try
  29.  
  30. Return result
  31.  
  32. End Function

我错过了什么吗?我没有关闭或处理应该是的对象吗?看起来奇怪的是它总是在连续十次请求之后发生.

笔记:

>在此方法所在的类的构造函数中,我有以下内容

ServicePointManager.DefaultConnectionLimit = 100
>如果我将KeepAlive设置为true,则在五个请求之后开始超时.
>所有请求都针对同一域中的页面.

编辑

我在每个Web请求之间添加了两到七秒之间的延迟,这样我就不会“锤击”该站点或尝试DOS攻击.但是,问题仍然存在.

我认为该网站有一些DOS保护,当它被一些rapis请求击中时就开始了.您可能想尝试在webrequest上设置UserAgent.

猜你在找的VB相关文章