开发者

VB.net httpwebrequest For loop hangs every 10 or so iterations

开发者 https://www.devze.com 2023-02-04 20:51 出处:网络
I am trying to loop through an array and perform an httpwebrequest in each iteration. The code seems to work, however it pauses for a while (eg alot longer than the set timeout. Tried setting that to

I am trying to loop through an array and perform an httpwebrequest in each iteration. The code seems to work, however it pauses for a while (eg alot longer than the set timeout. Tried setting that to 100 to check and it still pauses) after every 10 or so iterations, then carries on working.

Here is what i have so far:

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

I have searched all over this site and via google, and most responses to this type of question say the response must be closed. I have tried a using block, eg:

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

And it makes no difference (though i may have implemented it wrong) As you can tell im very new to VB or any OOP so its probably a simple problem but i cant work it out.

Any suggestions or just tips on how to diagnose these types of problems would be really appreciated.

EDIT: Now im thoroughly confused. Does the try catch statement automatically close the response, or do i need to put something in Finally? If so, what? i cant use response.close() because its declared in the try block.

Perhaps im just using really badly structured code and there is a much better way to do this? Or something else is causing the pause/hang?


Yeah, you need to close the response after you are done with it, as .net enforces a maximum number of concurrent requests

so just add

response.close()

at the end of your code block


Because, it's a very difficult to write code in comment I will continue as answer.

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
0

精彩评论

暂无评论...
验证码 换一张
取 消