Per Webbrowser Control Datei von Webseite runterladen

  • VB.NET

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

    Per Webbrowser Control Datei von Webseite runterladen

    Ich möchte eine Text-Datei mit einer bekannten Url doimain.de/Test.txt runterladen. Die Datei befindet sich auf einer durch Login und Passwort geschützten Webseite. Sobald ich die Datei per Webclient downloaden möchte, kommt eine Fehlermeldung, da bevor der Download gestartet werden kann, die Logindaten eingegeben werde müssen.

    Der für mich einzige Weg ist die Datei über webbrowser control runterzuladen, über den Befehl webbroser.navigate(url) leider öffnet sich das IE Downloadfenster des Browsers und ich muss dann manuell Klicken und den Downloadordner angeben.

    Kann man das umgehen, das es automatisch runtergeladen wird?
    Hallo Lobigo,
    Du suchst nach dem Header "Authorization:"
    hier ist mal eine fertiger Code von mir ;D

    Quellcode

    1. Public Function SendRequest(ByVal url As String, ByVal pw As String, ByVal name As String) As String
    2. Dim request As Net.HttpWebRequest = CType(Net.HttpWebRequest.Create(url), Net.HttpWebRequest)
    3. request.Method = Net.WebRequestMethods.Http.Get
    4. request.Timeout = 10000
    5. Dim byt As Byte() = System.Text.Encoding.UTF8.GetBytes(name & ":" & pw)
    6. request.Headers.Add("Authorization: Basic " & Convert.ToBase64String(byt))
    7. Dim response As Net.HttpWebResponse = CType(request.GetResponse, Net.HttpWebResponse)
    8. Dim leser As New IO.StreamReader(response.GetResponseStream())
    9. Dim source As String = leser.ReadToEnd
    10. Return source
    11. End Function
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Danke für die Antwort. Ganz klar ist es mir die Funktion leider nicht. Wo kann ich denn angeben, wo die Datei gespeichert werden kann? Ich habe die Funktion in mein Programm eingebaut, aber es passiert leider nichts.
    Die Funktion führe ich dann folgendermaßen aus:

    Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. SendRequest("https://domain.de/gp/ssof/reports/test.txt", "passwort", "name")
    3. End Sub
    du kriegst den text wieder zurück du könntest es also so machen :

    Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. IO.File.WriteAllText("C:\file.txt", SendRequest("https://domain.de/gp/ssof/reports/test.txt", "passwort", "name"))
    3. End Sub
    4. Public Function SendRequest(ByVal url As String, ByVal pw As String, ByVal name As String) As String
    5. Dim request As Net.HttpWebRequest = CType(Net.HttpWebRequest.Create(url), Net.HttpWebRequest)
    6. request.Method = Net.WebRequestMethods.Http.Get
    7. request.Timeout = 10000
    8. Dim byt As Byte() = System.Text.Encoding.UTF8.GetBytes(name & ":" & pw)
    9. request.Headers.Add("Authorization: Basic " & Convert.ToBase64String(byt))
    10. Dim response As Net.HttpWebResponse = CType(request.GetResponse, Net.HttpWebResponse)
    11. Dim leser As New IO.StreamReader(response.GetResponseStream())
    12. Dim source As String = leser.ReadToEnd
    13. Return source
    14. End Function
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    gib mir doch bitte einfach mal den Link dann kann ich dein Problem nach vollziehen.
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    ...
    Ahh das meinst du also mit einer Passwort gesicherten Seite ... das nächste mal sag doch einfach das es da ein Login Feld gibt.
    im diesen fall must du das Passwort im POST mit senden.
    ich habe mal ein Request aufgezeichnet :

    Quellcode

    1. widgetToken=&rememberMe=false&username=EMAIL&password=Passwort&sign-in-button=

    das must du jetzt eben nur noch mit senden.
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Ich habe jetzt das Post noch mitgegeben. Wenn ich die URL mit dem Post aufrufe, erscheint auch das Downloadfenster von der Datei. Sobald ich aber diese URL in den Request eingebe, lädt er wieder nur die Login Seite runter. Ist das vielleicht ein Schutzmechanismus?
    Wenn ich aber den Post in einen Browser anhänge, dann kommt das Downloadfenster. Das dürfte ja dann auch nicht klappen, was anderes macht die Funktion ja auch nicht.

    Vielleicht gibt es noch einen anderen Weg für das Problem. Die Hoffnung stirbt bekanntlich zuletzt.
    Kommt das Downloadfenster auch, wenn du es in einen jungfäulichen Browser eingibst.
    Lösche mal alle Cookies, ob dann der Browser auch noch mit Direkataufruf funktioniert.

    Wenn ja, einfach mal tracen, was dort an Headern mitgeschickt wird.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --