Datei Download hinter einem Proxy

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von HenryV.

    Datei Download hinter einem Proxy

    Hallo zusammen,

    ich habe folgendes Problem. Mein Backup Programm soll regelmäßig Updates erhalten. Funktioniert ohne Proxy alles ohne Probleme.
    Sitze ich allerdings hinter einem Proxy wie z.B in meiner Firma kann er die Dateien nicht herunterladen und meldet Proxy Authentication erforderlich (407)
    Hat jemand eine idee?



    Das Problem scheint hier zu sein ich komme aber nicht dahinter was genau

    VB.NET-Quellcode

    1. wRemote.Proxy = New Proxy(New Uri(Proxy:1234))
    2. wRemote.Credentials = New NetworkCredential("User", "Passwort")
    3. Public Function DownloadFileWithProgress(ByVal URL As String, ByVal Location As String, ByVal Sleep As Integer) As Boolean
    4. Try
    5. mCurrentFile = GetFileName(URL)
    6. Dim wRemote As HttpWebRequest
    7. Dim bBuffer As Byte()
    8. ReDim bBuffer(1024) '256
    9. Dim iBytesRead As Integer
    10. Dim iTotalBytesRead As Integer
    11. FS = New FileStream(Location, FileMode.Create, FileAccess.Write)
    12. wRemote = WebRequest.Create(URL)
    13. wRemote.Proxy = New Proxy(New Uri(Proxy:1234))
    14. wRemote.Credentials = New NetworkCredential("User", "Passwort")
    15. Dim myWebResponse As WebResponse = wRemote.GetResponse
    16. RaiseEvent FileDownloadSizeObtained(myWebResponse.ContentLength)
    17. Dim sChunks As Stream = myWebResponse.GetResponseStream
    18. Do
    19. iBytesRead = sChunks.Read(bBuffer, 0, 1024)
    20. FS.Write(bBuffer, 0, iBytesRead)
    21. iTotalBytesRead += iBytesRead
    22. If myWebResponse.ContentLength < iTotalBytesRead Then
    23. RaiseEvent AmountDownloadedChanged(myWebResponse.ContentLength)
    24. Else
    25. RaiseEvent AmountDownloadedChanged(iTotalBytesRead)
    26. End If
    27. Application.DoEvents()
    28. System.Threading.Thread.Sleep(Sleep)
    29. Loop While Not iBytesRead = 0
    30. sChunks.Close()
    31. FS.Close()
    32. RaiseEvent FileDownloadComplete()
    33. Return True
    34. Catch ex As Exception
    35. If Not (FS Is Nothing) Then
    36. FS.Close()
    37. FS = Nothing
    38. End If
    39. RaiseEvent FileDownloadFailed(ex)
    40. Return False
    41. End Try
    42. FS.Close()
    43. End Function


    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Wenn du hinter einem Proxy sitzt, dann ist dieser die zentrale Anlaufstelle für das Internet und Netzwerkdienste. Dieser verwaltet auch, welche Dienste im Netzwerk wie agieren dürfen. Für manche Dienste oder Ports kann es notwendig sein, dass du dich beim Proxy auch authentifizierst, damit dieser weiß, dass du über diesen Port diese Aktion ausführen darfst. Unter Umständen funktioniert deine Proxy-Einstellung, aber es kann sein, dass du dich dennoch beim Proxy anmelden musst. Da müsstest du mal auf der Arbeit deinen IT-Ler des Vertrauens zu befragen
    Das kann man definitiv auch automatisieren und programmieren. Aber wenn der Fehler -407 Proxy Authentication erforderlich - heißt, würde ich mal darauf tippen, dass dein Code genau das macht, was er soll, du aber bei dem Proxy nicht angemeldet (oder eben authentifiziert bist).
    Du musst dir das so vorstellen:

    PC sendet Daten an Proxy,
    Proxy prüft, ob diese Daten vom Sender an den Empfänger - über entsprechenden Port - gesendet werden dürfen.
    Bei Erfolg geschieht das, bei Misserfolg kommt eine entsprechende Fehlermeldung.
    Ein Proxy leitet ganz zentral den Netzwerk-Traffic nach definierten Vorgaben (so sind zum Beispiel einige Seiten bei Firmen nicht aufrufbar, da man sie blockiert). Wenn du nun also Daten über einen Weg sendest, der standardmäßig freigegeben ist (zB. HTTP über Port :80), wird der Proxy diese einfach durchlassen, da es in seinen Regeln so definiert ist. Du versuchst nun aber über Port :1234 etwas zu senden. Unter Umständen ist dieser Port aber am Proxy blockiert. Und um diesen Port zu öffnen, muss das die entsprechende IT machen - oder aber der Proxy verlangt eine Authentifizierung (wie bei dir). Es kann nun also gut sein, dass wenn du dein Programm laufen lässt, dieses am Proxy ankommt, und ebendieser nun einen Benutzer und ein Passwort verlangt, damit er weiß, dass er diesen Traffic auch durchlaufen lassen darf.

    Und du hattest ja schon

    VB.NET-Quellcode

    1. ​wRemote.Credentials = New NetworkCredential("user", "password")
    angegeben. Wenn du da nun eine Authentifizierung bekommst (sofern der Proxy so eingestellt ist, dass er mittels Authentifizierung arbeitet und nicht generell verwirft) und dort einträgst, sollte das dann hinterher funktionieren (so viel zur Theorie: Denn insgesamt steckt dahinter natürlich noch weitaus mehr als nur ein Proxy. Hierzu am Besten deine Firmen-IT ansprechen, wie dort gearbeitet wird und ob solche Traffics überhaupt möglich und gar erlaubt sind)