Download https

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

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Download https

    Hallo zusammen,

    stehe seit Tagen vor einem Problem, was ich mir nicht erklären kann.

    Lade diverse Daten aus dem Internet herunter. Dazu gibt es ein Hauptprogramm auf meinem Rechner.
    Bin ich im Urlaub oder verhindert, gibt es eine abgespeckte Programmversion, welche sich nur um den Datendownload kümmert.
    Dieses Programm läuft dann auf einem Fremdrechner (Sohn oder Freund).

    Nun habe ich eine Webseite, welche wohl besondere Freigaben benötigt.

    Dim WebAdresse = "https://www.westlotto.de/gluecksspirale/gewinnzahlen/gewinnzahlen.html?datum=" & Ziehungsdatum

    Mit folgender Function wird der Downloadstring ermittelt:

    VB.NET-Quellcode

    1. Private Function Webseite(ByVal WebLink As String, Optional Pingen As Boolean = True, Optional CookieFreigabe As Boolean = False) As String
    2. Me.InternetverbindungOK = False
    3. If Not My.Computer.Network.IsAvailable Then
    4. Return Nothing
    5. Exit Function
    6. End If
    7. Dim Webadresse As String = WebLink
    8. Dim PingLink As String = Nothing
    9. Dim Uri As New Uri(WebLink)
    10. Dim hReq As HttpWebRequest = Nothing
    11. Dim hRes As HttpWebResponse = Nothing
    12. Dim WebStream As Stream = Nothing
    13. Dim WebStreamReader As StreamReader = Nothing
    14. Dim WebPage As String = Nothing
    15. Dim PosSuchen As Integer = 0
    16. If Pingen Then
    17. Try
    18. Me.SuchPos = WebLink.IndexOf("www")
    19. PosSuchen = WebLink.IndexOf("https://")
    20. If Not Me.SuchPos = -1 Then ' enthält www im Link
    21. Me.SuchPos = WebLink.IndexOf(".")
    22. Me.DifLaenge = WebLink.Length - Me.SuchPos - 1
    23. PingLink = Strings.Right(WebLink, Me.DifLaenge)
    24. Me.SuchPos = PingLink.IndexOf("/")
    25. PingLink = Strings.Left(PingLink, Me.SuchPos)
    26. If PosSuchen = -1 Then
    27. If WebLink.StartsWith("http") Then PingLink.Replace("http://", "")
    28. Else
    29. If WebLink.StartsWith("https") Then PingLink.Replace("https://", "")
    30. End If
    31. Else ' enthält kein wwww
    32. If Not PosSuchen = -1 Then
    33. WebLink = WebLink.Replace("https://", "")
    34. Me.SuchPos = WebLink.IndexOf("/")
    35. PingLink = Strings.Left(WebLink, Me.SuchPos)
    36. End If
    37. End If
    38. Me.SuchPos = -1
    39. Me.DifLaenge = 0
    40. If Not My.Computer.Network.Ping(PingLink, 1000) Then
    41. Me.Webseite(WebLink, False)
    42. End If
    43. Catch ex As Exception
    44. Me.SuchPos = -1
    45. Me.DifLaenge = 0
    46. Return Nothing
    47. Exit Function
    48. End Try
    49. End If 'Pingen
    50. hReq = DirectCast(HttpWebRequest.Create(Uri), HttpWebRequest)
    51. With hReq
    52. .Timeout = 10000
    53. .Method = "GET"
    54. End With
    55. Try
    56. If CookieFreigabe Then
    57. hReq.CookieContainer = New CookieContainer
    58. hReq.UserAgent = "Firefox/58.0.2"
    59. hReq.ServicePoint.Expect100Continue = False
    60. End If
    61. hRes = CType(hReq.GetResponse, HttpWebResponse)
    62. hRes = DirectCast(hReq.GetResponse, HttpWebResponse)
    63. Catch ex As TimeoutException
    64. hRes.Close()
    65. hRes = Nothing
    66. Return Nothing
    67. Exit Function
    68. End Try
    69. Try
    70. WebStream = hRes.GetResponseStream
    71. WebStream.ReadTimeout = 3000
    72. WebStreamReader = New StreamReader(WebStream)
    73. WebPage = WebStreamReader.ReadToEnd
    74. WebStream.Close()
    75. WebStream = Nothing
    76. WebStreamReader.Close()
    77. WebStreamReader = Nothing
    78. hReq = Nothing
    79. hRes = Nothing
    80. Me.InternetverbindungOK = True
    81. Return WebPage
    82. Catch ex As Exception
    83. Me.InternetverbindungOK = False
    84. Return Nothing
    85. End Try
    86. End Function


    Das Hauptprogramm liefert keinen Fehler, wobei die Lightversion in Zeile 77 folgenden Fehler anzeigt:

    System.Net.WebException: Der Remoteserver hat einen Fehler zurückgegeben (403) Unzulässig.

    Beide Programme werden bei mir auf dem Rechner mit Admin gestartet. Haben gleiche Ausnahmen bei Antivir.

    Nächstes Problem sehe ich bei dem Browser. Kann nicht davon ausgehen, dass der Fremdrechner auch Firefox benutzt.
    Gruß Markus
    Sorry Leute,

    habe den Fehler entdeckt. Ein zu schneller Timer war dran Schuld. Das Hauptprogramm läuft da anders. Danke für Eure Hilfe.

    Nun bleibt halt die Frage:
    Nächstes Problem sehe ich bei dem Browser. Kann nicht davon ausgehen, dass der Fremdrechner auch Firefox benutzt.
    Kann man diesen nicht aus der Registratur auslesen?
    Gruß Markus

    Westerwälder schrieb:

    Nächstes Problem sehe ich bei dem Browser. Kann nicht davon ausgehen, dass der Fremdrechner auch Firefox benutzt.
    Ich sehe das Problem nicht.
    Du kannst als UserAgent alles mitgeben, was du willst.
    Da ist es nicht relevant, welche Browser installiert sind.
    Dein Programm fungiert wie ein eigener Browser.
    Er gibt dem Server lediglich vor, ein Firefox zu sein.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Z22 - Z67 kannst du stark reduzieren: System.Uri.Host Property

    Ich möchte aber noch anmerken, das ein Ping keine zuverlässige Methode ist um zu checken ob der Webserver erreichbar ist.
    1) Wenn ICMP Requests vom Server nicht beantwortet werden (ja so Idioten gibt es - ICMP ist ganz doll böse *nicht*)
    2) Wenn der Server zwar läuft und auf ICMP Requests reagiert, aber der Webserver nicht gestartet ist
    Danke slice.

    VB.NET-Quellcode

    1. Dim myPing As New NetworkInformation.Ping
    2. Dim PingErgebnis As NetworkInformation.PingReply = myPing.Send(Uri.Host, 1500)
    3. If Not PingErgebnis.Status = NetworkInformation.IPStatus.Success Then
    4. Me.Webseite(WebLink, False)
    5. End If
    Gruß Markus