webclient komischer Fehler

  • Allgemein

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    webclient komischer Fehler

    kriege ständig diese Fehlermeldung wenn ich mit dem Webclient etwas downloade:

    Ein Aufrufziel hat einen Ausnahmefehler verursacht.

    Der Code ist eigtl nur das hier:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Using wc As New WebClient
    3. wc.DownloadStringAsync(New Uri("https://www.vb-paradise.de/index.php?page=UsersOnline"))
    4. AddHandler wc.DownloadStringCompleted, AddressOf DownloadCompleted
    5. End Using
    6. End Sub
    7. Private Sub DownloadCompleted(sender As Object, e As DownloadStringCompletedEventArgs)
    8. MessageBox.Show(e.Result)
    9. End Sub


    Es schlägt immer beim Download fehl. Verstehe irgendwie nicht wo das Problem liegt..
    Eventuell gibt es eine InnerException. Wenn ja, dann solltest Du diesen auswerten.

    So ... eben schnell getestet:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Using wc As New WebClient
    3. wc.DownloadStringAsync(New Uri("https://www.vb-paradise.de/index.php?page=UsersOnline"))
    4. AddHandler wc.DownloadStringCompleted, AddressOf DownloadCompleted
    5. End Using
    6. End Sub
    7. Private Sub DownloadCompleted(sender As Object, e As DownloadStringCompletedEventArgs)
    8. If e.Error IsNot Nothing Then
    9. Debug.Print(e.Error.Message)
    10. Else
    11. Debug.Print(e.Result)
    12. End If
    13. End Sub

    Ergebnis:
    Der Remoteserver hat einen Fehler zurückgegeben: (403) Unzulässig.

    Laut Wikipedia bedeutet der StatusCode 403 keine Berechtigung
    Du musst vermutlich noch einen gültigen Useragent mitgeben, ansonsten lehnt der Server die Verbindung ab.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    bei mir Funktioniert es so Perfekt habe mir was eigenes geschrieben .
    Aufruf :

    VB.NET-Quellcode

    1. Dim Text As String = GetSite("http://www.vb-paradise.de/index.php?page=UsersOnline", HTTP.GET_HTTP)

    Module :

    VB.NET-Quellcode

    1. Public Module HTTP_Function2
    2. Public Function GetSite(ByVal url As String, ByVal Parm As HTTP, Optional Postdata As String = "") As String
    3. Dim Domain As String = url.Replace("//", "/").Remove(0, url.IndexOf("/") + 1)
    4. Dim rt As Integer = Domain.IndexOf("/")
    5. Dim Site As String = Domain.Remove(0, rt)
    6. Return SendHTTP(Domain.Remove(rt, Domain.Length - rt), Site, Parm, Postdata)
    7. End Function
    8. Public Function SendHTTP(ByVal Domain As String, site As String, Parm As HTTP, ByVal Postdata As String) As String
    9. Try
    10. Dim nettcp As New Net.Sockets.TcpClient
    11. nettcp.ReceiveTimeout = 5000
    12. nettcp.Connect(Domain, 80)
    13. Dim MP_TCP_Stream As Net.Sockets.NetworkStream = nettcp.GetStream
    14. Dim MP_TCP_Stream_r As New IO.StreamReader(MP_TCP_Stream)
    15. Dim MP_TCP_Stream_w As New IO.StreamWriter(MP_TCP_Stream)
    16. If Parm = HTTP.GET_HTTP Then MP_TCP_Stream_w.WriteLine("GET " & site & " HTTP/1.1")
    17. If Parm = HTTP.POST_HTTP Then MP_TCP_Stream_w.WriteLine("POST " & site & " HTTP/1.1")
    18. MP_TCP_Stream_w.WriteLine("HOST: " & Domain)
    19. MP_TCP_Stream_w.WriteLine("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0")
    20. If Parm = HTTP.POST_HTTP Then MP_TCP_Stream_w.WriteLine("Content-Length: " & New System.Text.ASCIIEncoding().GetBytes(Postdata).Length.ToString)
    21. MP_TCP_Stream_w.WriteLine("Connection: close")
    22. MP_TCP_Stream_w.WriteLine(String.Empty)
    23. If Parm = HTTP.POST_HTTP Then
    24. MP_TCP_Stream_w.WriteLine(Postdata)
    25. MP_TCP_Stream_w.WriteLine(String.Empty)
    26. End If
    27. MP_TCP_Stream_w.Flush()
    28. Dim rectext1 As String = MP_TCP_Stream_r.ReadToEnd
    29. If Not rectext1 = String.Empty Then Return rectext1
    30. Catch ex As Net.Sockets.SocketException
    31. End Try
    32. Return String.Empty
    33. End Function
    34. Public Enum HTTP
    35. GET_HTTP = 1
    36. POST_HTTP = 2
    37. End Enum
    38. End Module

    hoffe ich konnte dir helfen :)
    ist von MemberOn :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Man kann auch beim WebClient einen Useragent über die Header mitsenden. Eine komplette HTTP-Anfrage nachzubilden erscheint mir sinnlos, mit der WebClient-Klasse ist man meistens gut bedient.

    msdn.microsoft.com/en-us/libra…nt.headers(v=vs.110).aspx
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    In der Tat funktioniert es der WebClient mit der UserAgent-Angabe.
    Hier der Test-Code

    VB.NET-Quellcode

    1. Using wc As New WebClient
    2. wc.Headers.Add("User-Agent", "xtts02-web-browser")
    3. AddHandler wc.DownloadStringCompleted, AddressOf DownloadCompleted
    4. wc.DownloadStringAsync(New Uri("https://www.vb-paradise.de/index.php?page=UsersOnline"))
    5. End Using