DownloadString("https://www.nasdaq.com/markets/most-active.aspx") funktioniert nicht

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von MrTrebron.

    DownloadString("https://www.nasdaq.com/markets/most-active.aspx") funktioniert nicht

    Hallo
    Ich möchte von der Seite nasdaq.com/markets/most-active.aspx Quelltext laden. Früher ging es ohne Probleme.
    Ich habe schon DownloadString und HttpWebRequest probiert beide funktionieren nicht.
    Wie kriegt man das hin?

    VB.NET-Quellcode

    1. MessageBox.Show(New WebClient().DownloadString("https://www.nasdaq.com/markets/most-active.aspx"))

    funktioniert nicht

    VB.NET-Quellcode

    1. Dim Request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("https://www.nasdaq.com/markets/most-active.aspx")
    2. Dim Response As System.Net.HttpWebResponse = Request.GetResponse()
    3. Dim SR As System.IO.StreamReader = New System.IO.StreamReader(Response.GetResponseStream)
    4. Dim HWIDAdded As String = SR.ReadToEnd
    5. MsgBox(HWIDAdded)

    funktioniert auch nicht

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Meine Glaskugel ist in der Reinigung.
    Du musst uns schon sagen, was das Problem ist.
    Exceptions, und was sie uns sagen wollen
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Gut. Bei mir gibt's nach einigen Sekunden ein Timeout mit folgender Exception bei Request.GetResponse:
    Spoiler anzeigen

    Quellcode

    1. System.Net.WebException wurde nicht behandelt.
    2. HResult=-2146233079
    3. Message=Die zugrunde liegende Verbindung wurde geschlossen: Unbekannter Fehler beim Empfangen..
    4. Source=System
    5. StackTrace:
    6. bei System.Net.HttpWebRequest.GetResponse()
    7. bei WindowsApplication1.Form_Main.OnShown(EventArgs e) in C:\Users\Niko\AppData\Local\Temporary Projects\WindowsApplication1\Form_Main.vb:Zeile 24.
    8. bei System.Windows.Forms.Form.CallShownEvent()
    9. bei System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
    10. bei System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
    11. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    12. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    13. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    14. bei System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
    15. bei System.Windows.Forms.Control.InvokeMarshaledCallbacks()
    16. bei System.Windows.Forms.Control.WndProc(Message& m)
    17. bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    18. bei System.Windows.Forms.Form.WndProc(Message& m)
    19. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    20. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    21. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    22. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    23. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    24. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    25. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    26. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    27. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    28. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    29. bei WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    30. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    31. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    32. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    33. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    34. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    35. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    36. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    37. bei System.Threading.ThreadHelper.ThreadStart()
    38. InnerException: System.IO.IOException
    39. HResult=-2146232800
    40. Message=Von der Übertragungsverbindung können keine Daten gelesen werden: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat.
    41. Source=System
    42. StackTrace:
    43. bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
    44. bei System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
    45. bei System.Net.Security._SslStream.StartFrameHeader(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
    46. bei System.Net.Security._SslStream.StartReading(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
    47. bei System.Net.Security._SslStream.ProcessRead(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
    48. bei System.Net.TlsStream.Read(Byte[] buffer, Int32 offset, Int32 size)
    49. bei System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
    50. bei System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)
    51. InnerException: System.Net.Sockets.SocketException
    52. ErrorCode=10060
    53. HResult=-2147467259
    54. Message=Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat
    55. NativeErrorCode=10060
    56. Source=System
    57. StackTrace:
    58. bei System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
    59. bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
    60. InnerException:

    Und das interessanterweise auch, wenn ich den User-Agent und einige andere Details spoofe:

    VB.NET-Quellcode

    1. Dim Request = DirectCast(System.Net.HttpWebRequest.Create("https://www.nasdaq.com/markets/most-active.aspx"), System.Net.HttpWebRequest)
    2. Request.Method = "GET"
    3. Request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0"
    4. Request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
    5. Request.Headers.Add("Accept-Language", "de,en-US;q=0.7,en;q=0.3")
    6. Request.Headers.Add("Accept-Encoding", "gzip, deflate, br")
    7. Request.KeepAlive = True
    8. Request.Headers.Add("Upgrade-Insecure-Requests", "1")
    9. Request.Headers.Add("Cache-Control", "max-age=0")
    10. Request.AutomaticDecompression = System.Net.DecompressionMethods.GZip Or System.Net.DecompressionMethods.Deflate
    11. Using Response = DirectCast(Request.GetResponse, System.Net.HttpWebResponse)
    12. Using ResponseStream = Response.GetResponseStream, ResponseReader As New System.IO.StreamReader(ResponseStream, System.Text.Encoding.UTF8)
    13. Dim RawText = ResponseReader.ReadToEnd
    14. Dim bp = 0 'Haltepunkt
    15. End Using
    16. End Using

    Jetzt würde mich interessieren, warum die Exception bei dir nicht ausgelöst wird, sondern einfach nur eine leere MessageBox angezeigt wird. (So hab ich Post #3 jedenfalls verstanden.)
    Hast Du irgendwo einen Try-Catch-Block?
    Hast Du Option Strict Off?
    Hast Du irgendwo On Error Resume Next oder ähnliches stehen?
    Zeige bitte etwas mehr Kontext um den Code herum.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ich habe ganau das gleiche Problem wie bei dir jetzt.
    Eine leere MsgBox bekomme ich nicht, sondern eine Fehlermeldung.
    Das ist komisch, vor zwei Wochen funktionierte es wunderbar.
    Wenn man andere Internetseite nimmt, dann klappt es problemlos.
    Die Webseite wird glaube ich irgendwie geschützt. Im Webbrowser kann ich aber Quellcode der Seite problemlos anzeigen und denn brauche ich für weitere Funktionen.

    Hier Quellcode mit Fehlermeldung: Die zugrunde liegende Verbindung wurde geschlossen: Unbekannter Fehler beim Empfangen..

    VB.NET-Quellcode

    1. Private Sub Import()
    2. Try
    3. Dim Request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("https://www.nasdaq.com/markets/most-active.aspx")
    4. Dim Response As System.Net.HttpWebResponse = Request.GetResponse()
    5. Dim SR As System.IO.StreamReader = New System.IO.StreamReader(Response.GetResponseStream)
    6. Dim HWIDAdded As String = SR.ReadToEnd
    7. MsgBox(HWIDAdded)
    8. Catch exError As Exception
    9. MsgBox("Error")
    10. MessageBox.Show(exError.Message)
    11. End Try
    12. End Sub


    Hier die gleiche Fehlermeldung

    VB.NET-Quellcode

    1. Private Sub Import()
    2. Try
    3. MessageBox.Show(New WebClient().DownloadString("https://www.nasdaq.com/markets/most-active.aspx"))
    4. Catch exError As Exception
    5. MsgBox("Error")
    6. MessageBox.Show(exError.Message)
    7. End Try
    8. End Sub

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „andreas22222“ ()

    Ja, das war dann wohl ungünstig von Dir beschrieben.

    Die Betreiber der Webseite wollen wohl nicht, dass man die Daten automatisiert ausliest. Der Trick wird jetzt sein, die Requests so aussehen zu lassen, als würden sie von einem Browser aus gesendet werden. Was da noch alles dazugehört, weiß ich leider nicht.
    Alternativ kannst Du auch z.B. Selenium WebDriver verwenden. Das startet einen Browser und sendet Daten zwischen Deinem Programm und dem Browser hin und her. Dann kommen die Requests wirklich von einem Browser.

    Generell würde ich Dir auch empfehlen, die Try-Catch-Blöcke rauszunehmen. Wurde schon über neuntausend mal erklärt, warum es unsinnig ist, Exceptions zu verschlucken und nichtssagende MessageBoxen anzuzeigen.

    Und nebenbei: Alles, was IDisposable implementiert, muss Disposed werden. Also am besten einen Using-Block verwenden.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Einfach mal in die Terms of Use (Nutzungsbedingungen) schauen und schon merkt man dass dein Vorhaben gegen eben diese Verstößt.
    Dazu noch das Umgehen einer technischen Sicherung.

    Wenn du Daten vom NASDAQ brauchst musst du dich wohl mit denen in Verbindung setzen. Nicht unwahrscheinlich dass die ein API anbieten.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Hallo ich weiß jetzt nicht ob es dir weiterhilft,
    aber du kannst Realtime kurse aus dem Währungssektor über API bekommen. Hier solltest du mal bei FXCM schauen. Die haben eine offene API und ich habe schon erfolgreich darauf zugreifen können.
    Ist wie gesagt Währung und nicht Aktien Handel.

    Gruß
    @andreas22222 Was passiert, wenn Du das ganze im Browser machst?
    Teste ggf. das WebBrowser-Control zum loaden.
    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!
    Vllt geht das ganze ja mit einem WebBrowser, dessen DocumentText du ausgeben lässt? ?(

    LG
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.