Mit HttpWebRequestDatei downloaden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von XBrainBug.

    Mit HttpWebRequestDatei downloaden

    Hallo zusammen,

    ich versuche über HttpWebRequest eine Datei zu downloaden. Darüber habe ich sehr viel im Internet gefunden und auch schon sehr viel ausprobiert aber entweder erhalte ich eine Datei die nicht mit Excel lesbar ist oder leer ist. Ich vermute das es an dem Stream liegt aber da ich auch nur Anfänger bin, komme ich nicht weiter...

    Hier nur ein Ausschnitt von dem was ich bisher probiert habe:

    VB.NET-Quellcode

    1. Private Function Download1()
    2. Dim user As String = "user"
    3. Dim pass As String = "pass"
    4. Dim bpass As Byte() = Encoding.Default.GetBytes(user & ":" & pass)
    5. Dim basic As String = Convert.ToBase64String(bpass)
    6. Dim url As String = "http://srv-vm-n:8180/api/document/1"
    7. Dim request As HttpWebRequest = HttpWebRequest.Create(url)
    8. 'System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
    9. 'ServicePointManager.ServerCertificateValidationCallback = Function(sender, cert, chain, sllPolicyErrors) True
    10. request.Proxy = Nothing
    11. request.Method = "GET"
    12. request.PreAuthenticate = True
    13. request.Headers.Add(HttpRequestHeader.Authorization, "Basic " & basic)
    14. request.ContentType = "*/*"
    15. Dim response As HttpWebResponse = request.GetResponse
    16. Dim Stream As System.IO.Stream = response.GetResponseStream
    17. Dim StreamReader As New System.IO.StreamReader(Stream)
    18. Dim Data As String = StreamReader.ReadToEnd
    19. '############################################
    20. 'Hier erhalte ich eine Datei mit Inhalt aber Excel kann damit nichts anfangen, auch verschiedene Encodings haben nicht geholfen
    21. IO.File.WriteAllText("d:\eco.xls", Data)
    22. '############################################
    23. 'Hier erhalte ich ebenso eine leere Datei
    24. Dim length As Double = response.ContentLength
    25. Dim writeStream As New IO.FileStream("d:\eco1.xls", IO.FileMode.Create)
    26. Dim nRead As Integer
    27. Dim readBytes(4095) As Byte
    28. Dim bytesread As Integer = response.GetResponseStream.Read(readBytes, 0, 4096)
    29. Do Until bytesread = 0
    30. nRead += bytesread
    31. writeStream.Write(readBytes, 0, bytesread)
    32. bytesread = response.GetResponseStream.Read(readBytes, 0, 4096)
    33. Loop
    34. 'Close the streams
    35. response.GetResponseStream.Close()
    36. writeStream.Close()
    37. '############################################
    38. 'Hier erhalte ich eine leere Datei
    39. Dim bytesProcessed As Integer = 0
    40. Dim remoteStream As Stream
    41. Dim localStream As Stream
    42. If Not response Is Nothing Then
    43. remoteStream = response.GetResponseStream()
    44. localStream = File.Create("d:\eco4.xls")
    45. 'Declare buffer as byte array
    46. Dim myBuffer As Byte()
    47. 'Byte array initialization
    48. ReDim myBuffer(1024)
    49. Dim bytesRead1 As Integer
    50. bytesRead1 = remoteStream.Read(myBuffer, 0, 1024)
    51. Do While (bytesRead1 > 0)
    52. localStream.Write(myBuffer, 0, bytesRead1)
    53. bytesProcessed += bytesRead1
    54. bytesRead1 = remoteStream.Read(myBuffer, 0, 1024)
    55. Loop
    56. localStream.Close()
    57. End If
    58. Return Data
    59. End Function​


    Nur ergänzend, ich habe das ganze schon mit Powershell zum laufen bekommen aber hier gehts nicht um Powershell. Ich wollte damit nur sagen, ich bin sicher das es eine XLS Datei ist.
    INVOKE-RestMethod -Method GET -Header $Header -ContentType "*/*" -uri "http://srv-vm-n:8180/api/document/1" -OutFile D:\Eco.xls
    @XBrainBug Schau auch mal hier rein:
    Frage zu HttpRequest
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!