WebBrowser SessionID zum WebClient übertragen?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    WebBrowser SessionID zum WebClient übertragen?

    Grüße,

    Ich versuche derzeit eine Datei aus dem Internet herunter zu laden.
    Leider geht dies nur wenn die SessionID die mit in der URL gespeichert ist auch gleich der SessionID des Clients (WebClient) ist.

    Meine Frage ist wie kann ich von meinem System.Windows.Forms.WebBrowser die Cookies speichern / bzw meinem System.Net.WebClient übergeben.

    Habe hier von einem CookieAwareWebClient (couldbedone.blogspot.de/2007/0…ent-handling-cookies.html) gehört.
    Kann ich das auch für die Funktion DownloadFileAsync verwenden, und wenn ja wie?

    Mit freundlich grüßen.
    Hi
    also ich hab' selbst noch nie mit Cookies aus dem WebClient heraus hantiert, würde aber vermuten, dass es genügt, von der Klasse zu erben, wie im Artikel beschrieben und dort die Funktionalität so zu implementieren. Anschließend, denke ich, solltest du auf einer Instanz deines eigenen WebClients die entsprechende Funktion aufrufen können.

    Den WebBrowser würde ich nicht empfehlen.

    Viele Grüße
    ~blaze~
    *Vollzitat entfernt*

    Brauche aber den WebBrowser um auf Websiten dokumente zuzugreifen und diese zu kontrollieren.
    Den WebClient brauch ich dann nur um eine Datei runter zu laden.
    Wenn es eine andere Möglichkeit gibt eine Datei runter zu laden, und dabei die Cookies weiter zu geben wär ich auch zu frieden

    Edit; Hier ist mal der Source dazu (Uploaded Link kann einfach durch einen anderen ersetzt werden, Cookie aware client noch nicht enthalten)
    paste.ee/p/Mtms3

    Edit 2: Man hat mir auch gesagt, dass der Download vom WebServer gestreamed wird. Macht das eventuell einen Unterschied. Denn mein WebClient verzeichnet keinen Progress change

    ~blaze~: Vollzitat entfernt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „~blaze~“ ()

    Verwendest du den Standard-Webbrowser? Der ist meines Wissens veraltet und sollte nicht mehr verwendet werden. Ich weiß nicht, wie es sicherheitstechnisch aussieht, aber ich würde vermuten, dass er ggf. auch Sicherheitsrisiken darstellen kann, von den Kompatibilitätsproblemen mal abgesehen.
    Hast du dir den von dir geposteten Link mal angesehen? Hat das nicht funktioniert? Oder benötigst du die Cookies aus dem Webbrowser?

    C#-Quellcode

    1. WebClient cl = new CookieAwareWebClient();
    2. cl.DownloadFileAsync(...);

    oder so ähnlich.
    Auf welche Art von Dokumente wird denn zugegriffen, bzw. ließe sich das nicht anders lösen?

    Um die Probleme mit dem Webbrowser-Steuerelement zu umgehen, wird häufig auf andere Browser zurückgegriffen, die dann mitgeliefert werden. Heutzutage kann man sich auch nicht mehr darauf verlassen, dass IE/Edge vorinstalliert sind.

    Viele Grüße
    ~blaze~
    *Vollzitat entfernt*

    Hallo,
    Danke für die schnelle antwort.

    Es wird auf Elemente wie z.B eine Textbox zugegriffen.
    Das Problem ist, dass das ganze eine Konsolen Anwendung werden soll und keine WinForms Anwendung.

    Der Download Link von mir wird richtig erstellt "http://xxxx.io/ul/?dl=o5svtesf&key=d0e1bac7b951e08ae2f015201217f8c3" (sprich href wurde auch decoded um die sonderzeichen zu ersetzen etc.)
    Wenn ich den Link über meinen normalen Browser aufrufe, wird der download dort nicht gestartet, da der Session Cookie nicht richtig ist (Siehe ersten Anhang).

    Wie bereits erwähnt, ich wär auch gerne bereit einen anderen Browser zu nehmen wenn das denn auch mit der Console klappt.
    Übrigens: Ich habe einen Source code als Edit im Post über dir hinterlegt (hier nochmal: paste.ee/p/Mtms3, darin ist der CookieAwareClient nicht enthalten, da ich nicht weiß wie ich dem Cookie Client meine cookies geben kann)

    ~blaze~: Vollzitat entfernt
    Bilder
    • error.png

      6,38 kB, 979×27, 118 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Mit dem Teilgebiet bin ich leider absolut nicht firm. Eventuell übernimmt jemand, der das besser beherrscht.

    Meine Herangehensweise wäre der Versuch eines Verzichts auf den WebBrowser. Somit würde ich sämtliche Daten auf dem CookieAwareWebClient bearbeiten und entsprechend eine Bibliothek auf github, usw. suchen, die HTML-Unterstützung bietet.
    Falls benötigt, würde ich zudem noch darauf achten, dass/inwiefern JavaScript, usw. unterstützt werden, falls das für die Cookies nötig ist.

    Edit: Gerade erst gesehen:

    Fachkraftx3 schrieb:

    Man hat mir auch gesagt, dass der Download vom WebServer gestreamed wird. Macht das eventuell einen Unterschied. Denn mein WebClient verzeichnet keinen Progress change

    Ich denke nicht, dass das das Problem ist. Der WebClient wird ja sofort abgelehnt, da kein entsprechendes Cookie vorhanden ist, folglich kommt es wohl gar nicht erst zum Streaming.

    Alternativ könnte auch folgender Link noch interessant sein: stackoverflow.com/a/4185764

    Übrigens: Bitte beachte, dass du keine Vollzitate machst. Zitiere nur Ausschnitte der Nachricht, auf die sich dein Text bezieht und nur dann, wenn der Bezug nicht klar ist. Code kannst du außerdem durch die Verwendung von

    Quellcode

    1. [spoiler][/spoiler]
    im Forum einbetten, ohne dass es unübersichtlich wird.

    Viele Grüße
    ~blaze~
    Kannst du das Verhalten irgendwie nachvollziehbar machen? Das würde ich jetzt eher als abnormales Verhalten bezeichnen. Wenn man sich den Sourcecode anschaut, sollte das auch nicht auftreten:
    referencesource.microsoft.com/…quest.cs,f2ab2d685cb26f13
    referencesource.microsoft.com/…ainer.cs,eb89f175de026fb3
    referencesource.microsoft.com/…ction.cs,0a36c1220419cb9d
    Die haben alle drei kein sperrendes Verhalten, sowohl Count, als auch CookieContainer, als auch CookieCollection.

    Vielleicht gehst du das mal schrittweise durch und schreibst, an welcher Stelle sich nichts mehr tut.

    Viele Grüße
    ~blaze~
    Ich finde man sollte hier generell an einer ganz anderen Stelle ansetzen.
    Nimm einen Browser, der noch keine Cookies der Daten gespeichert hat. Deaktiviere JavaScript und öffne die Entwicklertools, dann sorgst du manuell dafür, dass du etwas downloaden kannst und guckst dir an, ob es überhaupt ohne JavaScript funktioniert und andererseits, was für Daten gesendet werden. Dafür muss während dem ganzen Vorgang der Netzwerk-Tab der Dev-Console aktiviert sein, sonst loggt der nichts mit.

    Da sind dann idR meist die POST anfragen interessant. Diese versuchst du dann über einen WebClient nachzubilden und vergleichst, ob du auch tatsächlich diesselben Antworten bekommst. Natürlich brauchst du dabei auch einen CookieContainer.

    Falls es bereits im Browser nicht funktioniert wie gewohnt, liegt das vmtl. an JS dann wirds kompliziert, denn dann musst du dich durch den JS Code durchwühlen und das nachahmen, was der JS Code macht(zumindest den Teil, der dafür sorgt, dass du dein Session Cookie bekommst).

    Besser helfen kann man dir dann wenn du hier mehr Infos über die Seite/den Vorgang postest
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @jvbsl
    @~blaze~

    Weiß nicht ob du/ihr jetzt das meint (Screenshots im Anhang)
    Die cookies konnte ich jedoch auslesen, und das programm hab ich auch zum weiterlaufen gebracht (Lag hier an einem falsch benutzten Objekt)

    Die frage stellt sich mir nun was mir diese screenshots über den vorgang sagen sollen (Kenne mich mit web vorgängen nicht so gut aus)
    die bringen genau gar nichts^^
    Du musst damit anfangen die Requests zu sniffen, bevor du überhaupt irgendein cookie der seite hast. In einem privaten Fenster vlt. oder alle Cookies dieser seite löschen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---