none
Net.HttpWebRequest.Create(file) funktioniert je nach http: auch mal nicht. Siehe Code Beispiel RRS feed

  • Frage

  • Es soll eine auf einer Webseite vorhandene .jpg Datei gedownloaded werden und als .jpg Datei auf Laufwerk D:\ gespeichert werden. Natürlich gibt es die Möglichkeit direkt einen Download auszuführen mit wie: wClient.DownloadFile(SymbB, "D:\Test.jpg")[wClient vorher mit DIM definieren, SymbB ist der URL: String].

    Jedoch so oder wie folgt bricht (offensichtlich der Server) die Übertragung ab, und zwar bei dem URL: http://i.colnect.net/f/705/851/Seiji-Ozawa.jpg [ist eine Briefmarke]. Mit der auf meiner eigenen Webseite vorhandene .jpg Datei aber auch bei anderen Webseiten funktioniert es. Verwunderlich ist nur, dass die manuell in der Explorer Zeile links ob. eingegebene URL Zeile sehr wohl die .jPG Datei auf der Computer HTML-Bildschirm zeigt. Die Web Fehlermeldung gibt nur an wie: Verbindung mit Server unterbrochen, mehr nicht.

    Es würde mir auch reichen wenn die Pixel-Width und Pixel-Height gespeichert werden können. Dass Verwunderliche ist nur, dass z.B. mit der rechten Maustaste auf der Grafik .jpg -> Eigenschaften das Betriebssytem in Millisekunden diese Pixelwerte anzeigt. Sicherlich werden dabei die Pixel-Bytes nicht noch einmal eingelesen, denke ich. Aber meine Recherchen haben VB Code dafür bisher nicht gefunden.

    Code Beispiel:

       Private Sub TestJPG()  'Eigene Webseite OK colnect bricht ab!
            Dim file As String = "http://www.stamplooker.de/Brfm/AFG/AFG 2041.jpg"  'Eigene Webseite OK Specify URL of an image http://i.colnect.net/f/705/851/Seiji-Ozawa.jpg wird unterbrochen
            Dim request As System.Net.WebRequest = System.Net.HttpWebRequest.Create(file)
            Dim response As System.Net.HttpWebResponse = request.GetResponse()
            Dim stream As System.IO.Stream = response.GetResponseStream()
            Dim length As Integer = response.ContentLength ' Get the length of the content
            Dim bytes(length) As Byte ' Create a temporary array for the content of the file.
            For i As Integer = 0 To length - 1  ' Get all bytes of the content
                bytes(i) = stream.ReadByte() : ListBox2.Items.Add(i.ToString + "Bytes Downloaded")
                Application.DoEvents()
            Next
            Using output As IO.Stream = System.IO.File.Create("D:\Test.jpg") ' 'Eigene Webseite OK Write the content to the local file nicht C:\ = System
                output.Write(bytes, 0, bytes.Length)
            End Using
            response.Close() ' muss
        End Sub

    Vielen Dank im voraus für eine Erleuchtung.

    François Prick van Wely


    Donnerstag, 25. August 2016 14:12

Antworten

Alle Antworten

  • Hallo François,

    Ich würde sagen, dass es nicht an Deinem Code liegt, weil ich ihn gerade getestet habe. Es werden Bilder von anderen URLs erfolgreich heruntergeladen und gespeichert, einschließlich dieser URL (dasselbe Bild, nur größer). Erhältst Du den Fehler The remote server returned an error (503) Server Unavailable?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 26. August 2016 13:56
    Administrator
  • Hallo

    Dimitar hat Recht, wenn er sagt an deinem Code liegt es nicht (aber irgendwie doch). Die Seite verhindert durch diverse Code den Download der Bilder. Im Klartext der Eigentümer der Seite oder der Rechtinhaber möchte nicht, dass das Bild downgeladen wird. Jetzt kann man das natürlich umgehen, aber das ist dann etwas was nicht "schön" ist und somit gibt es auch kein Code, sorry

    mfg monarch

    Freitag, 26. August 2016 14:54
  • Hallo Dimitar und Monarch,

    ihr habt ja recht, sowas von  recht! Meine Fehlermeldung ist in Deutsch und ohne Nummer wie "Verbindung wurde vom Server unerwartet unterbrochen".

    Monarch hat es wohl richtig erfasst; der Inhaber möchte nicht, dass seine Bilder heruntergeladen werden. Ich vermutete dass schon, denn 2015 ging es noch.

    Die Frage ist noch: wie schaft der Inhaber das? Nicht um es zu umgehen, sondern um es vielleicht selber mal anzuwenden. Er müsste merken ob eine Anfrage von einer HTML-Seite oder manuel von einer Explorer-Leiste li. ob. kommt oder ob ein Download-Befehl von einem Computer kommt.

    Vielen Dank für Eure prompte Hilfe. Ich vergebe noch Punkte.

    François




    Freitag, 26. August 2016 19:31
  • Hallo François,

    ich würde vermuten dass der Server etwas abfragt was der Browser beim Request zum Download mit sendet. Das könnte beispielsweise der User-Agent-String sein.

    Und ich vermute genau das wird hier genutzt. Denn wenn ich im F12 Menü von Edge unter Emulation einen benutzerdefinierten User-Agent-String einstelle (--- in meinem Test), dann kann ich das Bild auch nicht mehr im Browser anzeigen.

    Damit liegt es auf der Hand wie man das umgehen könnte, da der User-Agent-String ebenfalls mitgegeben werden kann. Der Anbieter sollte sich bei der Technik ebenfalls bewusst sein, dass man das recht leicht umgehen kann.

    PS: Du kannst auch eine oder mehrere Antworten als Antwort markieren, das geht über den entsprechenden Link unter jedem Post.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 28. August 2016 13:02
    Moderator