VB.net httpwebrequest For循环每10次左右迭代

时间:2011-01-14 08:54:57

标签: vb.net httpwebrequest httpwebresponse

我正在尝试遍历数组并在每次迭代中执行httpwebrequest。 代码似乎有效,但它会暂停一段时间(例如,比设置超时时间长很多。尝试设置为100以检查并且它仍然暂停)每经过10次左右的迭代,然后继续工作。

这是我到目前为止所拥有的:

For i As Integer = 0 To numberOfProxies - 1

            Try
                'create request to a proxyJudge php page using proxy
                Dim request As HttpWebRequest = HttpWebRequest.Create("http://www.pr0.net/deny/azenv.php")
                request.Proxy = New Net.WebProxy(proxies(i)) 'select the current proxie from the proxies array
                request.Timeout = 10000 'set timeout 

                Dim response As HttpWebResponse = request.GetResponse()

                Dim sr As StreamReader = New StreamReader(response.GetResponseStream())
                Dim pageSourceCode As String = sr.ReadToEnd()
                'check the downloaded source for certain phrases, each identifies a type of proxy
                'HTTP_X_FORWARDED_FOR identifies a transparent proxy
                If pageSourceCode.Contains("HTTP_X_FORWARDED_FOR") Then
                    'delegate method for cross thread safe
                    UpdateListbox(ListBox3, proxies(i))
                ElseIf pageSourceCode.Contains("HTTP_VIA") Then
                    UpdateListbox(ListBox2, proxies(i))
                Else
                    UpdateListbox(ListBox1, proxies(i))
                End If

            Catch ex As Exception
                'MessageBox.Show(ex.ToString) used in testing
                UpdateListbox(ListBox4, proxies(i))
            End Try
            completedProxyCheck += 1
            lblTotalProxiesChecked.CustomInvoke(Sub(l) l.Text = completedProxyCheck)

        Next

我在这个网站上搜索并通过谷歌,大多数对这类问题的回答都说必须关闭回复。我尝试了一个使用块,例如:

Using response As HttpWebResponse = request.GetResponse()
Using sr As StreamReader = New StreamReader(response.GetResponseStream())
    Dim pageSourceCode As String = sr.ReadToEnd()
                    'check the downloaded source for certain phrases, each identifies a type of proxy
                    'HTTP_X_FORWARDED_FOR identifies a transparent proxy
                    If pageSourceCode.Contains("HTTP_X_FORWARDED_FOR") Then
                        'delegate method for cross thread safe
                        UpdateListbox(ListBox3, proxies(i))
                    ElseIf pageSourceCode.Contains("HTTP_VIA") Then
                        UpdateListbox(ListBox2, proxies(i))
                    Else
                        UpdateListbox(ListBox1, proxies(i))
                    End If
End Using
End Using

它没有任何区别(虽然我可能已经实现了它错误)因为你可以告诉我非常新的VB或任何OOP所以它可能是一个简单的问题,但我无法解决它。

非常感谢任何有关如何诊断这类问题的建议或提示。

编辑: 现在我彻底迷茫了。 try catch语句是否自动关闭响应,或者我需要在Finally中放入一些内容吗?如果是这样,什么?我不能使用response.close(),因为它在try块中声明。

也许我只是使用结构非常糟糕的代码,还有更好的方法吗?或者其他什么导致暂停/挂起?

2 个答案:

答案 0 :(得分:1)

是的,你需要在完成后关闭响应,因为.net强制执行最大数量的并发请求

所以只需添加

response.close()

在代码块的末尾

答案 1 :(得分:0)

因为,在评论中编写代码非常困难,我会继续作为答案。

For i As Integer = 0 To numberOfProxies - 1
Dim response As HttpWebResponse
    Try
        'create request to a proxyJudge php page using proxy
        Dim request As HttpWebRequest = HttpWebRequest.Create("http://www.pr0.net/deny/azenv.php")
        request.Proxy = New Net.WebProxy(proxies(i)) 'select the current proxie from the proxies array
        request.Timeout = 10000 'set timeout 

        response = request.GetResponse()

        Dim sr As StreamReader = New StreamReader(response.GetResponseStream())
        Dim pageSourceCode As String = sr.ReadToEnd()
        'check the downloaded source for certain phrases, each identifies a type of proxy
        'HTTP_X_FORWARDED_FOR identifies a transparent proxy
        If pageSourceCode.Contains("HTTP_X_FORWARDED_FOR") Then
             'delegate method for cross thread safe
              UpdateListbox(ListBox3, proxies(i))
        ElseIf pageSourceCode.Contains("HTTP_VIA") Then
              UpdateListbox(ListBox2, proxies(i))
        Else
              UpdateListbox(ListBox1, proxies(i))
        End If

    Catch ex As Exception
        'MessageBox.Show(ex.ToString) used in testing
        UpdateListbox(ListBox4, proxies(i))
    Finally
        response.Close()
    End Try
    completedProxyCheck += 1
    lblTotalProxiesChecked.CustomInvoke(Sub(l) l.Text = completedProxyCheck)

Next