Web URL のページソースを取得するパブリック関数があります。これが関数です。
Public Function gethtml(ByVal id As Integer)
Try
ListView1.Items(id).SubItems(6).Text = "Downloading HTML..."
Dim Response3 As HttpWebResponse
Dim pagesource3 As String
Dim datastream As Stream
Dim postdata As String = ""
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postdata)
Dim Request3 As HttpWebRequest = HttpWebRequest.Create("http://mysite.com/ip.php")
Request3.Referer = "http://google.com/"
Request3.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
Request3.KeepAlive = True
Request3.Timeout = "5000"
Request3.AllowAutoRedirect = True
If useproxycheckbox.Checked = True Then
Dim words As String() = ListView1.Items(id).SubItems(9).Text.Split(New Char() {":"c})
Request3.Proxy = New WebProxy(words(0).ToString & ":" & words(1).ToString)
Request3.UseDefaultCredentials = False
Request3.Proxy.Credentials = New System.Net.NetworkCredential(words(2).ToString, words(3).ToString)
End If
Request3.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31"
Request3.CookieContainer = CC
Request3.Method = WebRequestMethods.Http.Get
Request3.ContentType = "application/x-www-form-urlencoded"
Response3 = Request3.GetResponse()
Dim Stream3 As New StreamReader(Response3.GetResponseStream())
pagesource3 = Stream3.ReadToEnd()
Response3.Close()
Stream3.Close()
ListView1.Items(id).SubItems(4).Text = pagesource3
Catch e1 As ProtocolViolationException
recheck(id)
ListView1.Items(id).SubItems(6).Text = "Error1"
Catch e2 As WebException
recheck(id)
ListView1.Items(id).SubItems(6).Text = "Error2"
End Try
End Function
問題は、次のような最初の呼び出しで正常に動作することです
gethtml(0)
しかしその後、私が提供したプロキシを使用しません。最初のリクエストで使用されたのと同じプロキシを使用するだけです。メインスレッドでこれを使用するとUIがフリーズするため、スレッドを使用してこの関数を呼び出しています。私が間違っていることは何ですか?私はVB.netの初心者です
ありがとう。
更新: この問題は、USERNAME:PASSWORD 基本認証を持つプロキシでのみ発生することがわかりました。助けて!