none
Dateivergleich (Datum Erstellung) vor http Download (WinHttpRequest.5.1) RRS feed

  • Frage

  • Ich lade dateien aus dem netz via ADO Stream WinHttpRequest.5.1

    da ich einige dateien nur benötige wenn sie neuer sind würde ich gerne vor dem Download das datum der erstellung vergleichen

    kann ich das hier in der form?

    Public Function DateidownloadADOStream(ByVal strDateiadresse As String, ByVal strZieladresse As String, MitFehlermeldung As Boolean) As Boolean
    On Error GoTo Fehler
    
    Dim oHttp, sURL, sSavePath, oStream
      
    Set oHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
      
    oHttp.Open "GET", strDateiadresse & "?a=" & Int((1000000 - 1 + 1) * Rnd + 1), False
    oHttp.setRequestHeader "Cache-control", "no-cache"
    oHttp.Send
    If oHttp.Status = 200 Then
        Set oStream = CreateObject("adodb.stream")
        oStream.Type = 1 '1=adTypeBinary
        oStream.Open
        oStream.Write oHttp.responseBody
        oStream.SaveToFile strZieladresse, 2 '2=adSaveCreateOverWrite, 1=adSaveCreateNotExist
        Set oStream = Nothing
    Else
    
    End If
    
    Set oHttp = Nothing
    DateidownloadADOStream = True
    Exit Function
    
    Fehler:
    DateidownloadADOStream = False
    If MitFehlermeldung = True Then MsgBox Err.Number & vbCrLf & "Fehlerbeschreibung: " & Err.Description & vbCrLf & "Dateiname: " & strDateiadresse
    
    End Function

    Donnerstag, 26. April 2018 06:45

Antworten

  • Hi,

    bei einem Request wird ein Last-Modified Header mit dem Wert "Wed, 11 Apr 2018 19:51:30 GMT" vom Server gesendet. Den solltest Du bei einem vorhergehenden HEAD Request (einfach GET zu HEAD ändern) wird auslesen und gegen deinen letzten Zeitstempel prüfen.

    Dafür muss auf der Serverseite nichts gemacht werden.

    Den "If-Modified-Since" Header ignoriert der Server aber leider. Daher wirst Du um zwei Requests (einmal HEAD, Last-Modified Zeit prüfen und dann ggfs. ein GET hinterher) nicht drumrum kommen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Freitag, 27. April 2018 11:24
    Moderator

Alle Antworten

  • Hi,

    wie man das am besten macht und welche Möglichkeiten überhaupt bestehen, hängt u.a. davon ab, welche Gegenstellen Du ansprichst und ob Du diese beeinflussen bzw. anpassen kannst.

    Im einfachsten Fall sendest Du einfach einen If-Modified-Since Header mit. Falls der Server das unterstützt, sendet er dir bei neuen/aktualisierten Dateien eine Antwort mit Status 200, anderenfalls 304.

    GET fordert dabei die gesamte Ressource inkl. Body an. Falls obiges nicht funktioniert, sende zuerst einen HEAD Request anstelle von GET, dann erhältst Du nur die Header. Mit etwas Glück steht dort auch der Last-Modified Header mit einem entsprechenden Datum drin, das Du dann mit dem von dir zwischengespeicherten Datum vergleichen kannst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 26. April 2018 07:58
    Moderator
  • ich habe mal in meiner Obigen Function ein

    oHttp.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 1899 00:00:00 GMT"

    oder

    oHttp.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2019 00:00:00 GMT"

    eingesetzt und bekomme jeweils den status 200 zurück - was ja nicht sein kann wenn es funktionieren sollte

    und dabei bin ich leider ganz raus

    Falls obiges nicht funktioniert, sende zuerst einen HEAD Request anstelle von GET,

    dann erhältst Du nur die Header.

    Mit etwas Glück steht dort auch der Last-Modified Header mit einem entsprechenden Datum drin


    auf die gegenstelle habe ich leider keinen einfluss


    • Bearbeitet MCDPone Freitag, 27. April 2018 10:39 dd
    Freitag, 27. April 2018 10:39
  • Hi,

    poste doch mal bitte eine Adresse, um die es geht. Dann schau ich mal, welche Daten ausgetauscht werden.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 27. April 2018 10:46
    Moderator
  • https://download.anydesk.com/AnyDesk.exe
    Freitag, 27. April 2018 11:07
  • Hi,

    bei einem Request wird ein Last-Modified Header mit dem Wert "Wed, 11 Apr 2018 19:51:30 GMT" vom Server gesendet. Den solltest Du bei einem vorhergehenden HEAD Request (einfach GET zu HEAD ändern) wird auslesen und gegen deinen letzten Zeitstempel prüfen.

    Dafür muss auf der Serverseite nichts gemacht werden.

    Den "If-Modified-Since" Header ignoriert der Server aber leider. Daher wirst Du um zwei Requests (einmal HEAD, Last-Modified Zeit prüfen und dann ggfs. ein GET hinterher) nicht drumrum kommen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Freitag, 27. April 2018 11:24
    Moderator
  • Hallo Stefan

    Danke für deine Hilfe

    Freitag, 27. April 2018 12:56