2017-06-07 54 views
0

このコードは以前はうまく動作していましたが、昨日からエラーが表示され始めました。 CookieContainerを追加するので、私の問題はクッキーに関するものだが、多くの同様のディスケットを読んだが、同じエラーが出る。 私のコードは私がウェブサイトから写真や彼らのタイトルを取得し、それらを表示することができ、ここに私のコードは次のとおりです。
フォーム1:
Vb.net webclientエラー:多すぎる自動リダイレクトが試みられました

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 
    Dim websiteURL1 As String = "http://www.gamestop.com/collection/upcoming-video-games" 
    Class1.getPics(websiteURL1, "<img src=""(?<Data>[^>]*)""><p>(?<Dataa>[^>]*)<br>") 
    Me.AutoScroll = True 
End Sub 

のClass1 fucntion:

Public Shared Function getPics(website As String, pattern As String) 
    Dim tempTitles As New List(Of String)() 
    Dim tempTitles2 As New List(Of String)() 
    Dim lestitres As New List(Of titlesclass) 
    Dim webClient As New CookieAwareWebClient() 
    webClient.Headers.Add("user-agent", "null") 
    'If the website happens to go offline, at least your application wont crash. 
    'Handle default proxy 
    Dim proxy As IWebProxy = WebRequest.GetSystemWebProxy() 
    proxy.Credentials = CredentialCache.DefaultCredentials 
    webClient.Proxy = proxy 

    Dim content As String = webClient.DownloadString(website) 
    Dim query = From title In Regex.Matches(content, pattern).Cast(Of Match) 
       Select New With {Key .Link = String.Concat("http://www.gamestop.com", title.Groups("Data").Value), 
        Key .Title = title.Groups("Dataa").Value} 

    Dim titles = tempTitles.Distinct().ToArray() 'remove duplicate titles 
    Dim titles2 = lestitres.Distinct().ToArray() 
    lestitres.Clear() 
    'Count Items 
    Dim item As Integer = 0 
    'Count Row 
    Dim row As Integer = 0 
    'image: 222*122 
    For Each letitre In query.Distinct 
     Dim ImageInBytes() As Byte = webClient.DownloadData(letitre.Link) 
     Dim ImageStream As New IO.MemoryStream(ImageInBytes) 
     Dim MyPic As New PictureBox 
     Dim MyLab As New Label 
     'x = numéro item fois largeur image 
     'y = numéro de ligne fois hauteur image 
     MyPic.Location = New Point(item * 222, row * 122) 
     MyLab.Location = New Point(item * 222, row * 122) 
     MyPic.SizeMode = PictureBoxSizeMode.AutoSize 
     MyLab.Text = letitre.Title 
     MyPic.Image = New System.Drawing.Bitmap(ImageStream) 
     Form2.Controls.Add(MyPic) 
     Form2.Controls.Add(MyLab) 
     'Bring Labels to front 
     For Each ctrl As Control In Form2.Controls 
      'If the control is of type button 
      If TypeOf ctrl Is Label Then 
       'Then disable it 
       ctrl.BringToFront() 
      End If 
     Next 
     'Increment the item count 
     item = item + 1 
     'If item is multiple of 4 or could check 4 then 
     If item Mod 4 = 0 Then 
      'Reset counter 
      item = 0 
      'Increment Row 
      row = row + 1 
     End If 
    Next 
End Function 

CookieContainerのWebClientクラス:

Imports System.Net 
Imports System.Text.RegularExpressions 
Public Class CookieAwareWebClient 
    Inherits WebClient 

    Private cc As New CookieContainer() 
    Private lastPage As String 

    Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest 
     Dim R = MyBase.GetWebRequest(address) 
     If TypeOf R Is HttpWebRequest Then 
      With DirectCast(R, HttpWebRequest) 
       .CookieContainer = cc 
       If Not lastPage Is Nothing Then 
        .Referer = lastPage 
       End If 
      End With 
     End If 
     lastPage = address.ToString() 
     Return R 
    End Function 
End Class 

答えて

0

ウェブサイト自動的にWebクライアントの場所(国)を検出し、別のWebサイトにリダイレクトする新しい機能を追加しました。私の場合は、Webクライアントのプロキシを米国に設定しましたので、リダイレクトせずにリンクを訪れることができます。 プロキシ設定を追加するには、使用することができます: https://www.us-proxy.org/

webclient1.Proxy = New WebProxy("YourProxyServerName", port) 

exempleここ

webClient.Proxy = New WebProxy("100.12.34.36", 8080) 

のためには、無料のアメリカ合衆国のproxysのリストです

関連する問題