Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Wie "öffne" ich eine URL mit einem | (https://www.delphipraxis.net/214809-wie-oeffne-ich-eine-url-mit-einem-%7C.html)

DelTurbo 13. Mär 2024 12:08

Wie "öffne" ich eine URL mit einem |
 
Hi,
ich müsste eine Datei herunterladen. Allerdings ist in der URL ein | (was ich noch nie gesehen habe).
Kein Browser lädt den "Mist". Auch wget auf Unix nicht.

Leider kann ich die URL nicht veröffentlichen, deswegen nur ein Beispiel.

https://#####.de/#######/########/daten|export_v2.csv

Ich habe fast das Gefühl als wenn das gar nicht ein "normaler" Senkrechter Strich ist.

Vielleicht hat ja jemand eine Idee oder weiß was das sein soll.

Vielen Dank im voraus

Rollo62 13. Mär 2024 12:23

AW: Wie "öffne" ich eine URL mit einem |
 
Hast Du statt dem Pipe-Strich mal ein Fragezeichen probiert?

DelTurbo 13. Mär 2024 12:29

AW: Wie "öffne" ich eine URL mit einem |
 
Ja habe ich. Ich habe auch schon den Grafischen strich probiert. Geht alles nicht.

Ich habe das gerade mal bissl getracert. Der sucht ein Cookie. Ich denke mal das nur wenn man einmal dort angemeldet war. Ob wohl der Support sagt es würde auch mit wget gehen. Also es wurde explizit nach wget gefragt und das wurde mit ja beantwortet. Ist vielleicht ein Quereinsteiger... :shock:

DelTurbo 13. Mär 2024 12:40

AW: Wie "öffne" ich eine URL mit einem |
 
So,
es ist nun definitiv. Man muss sich angemeldet haben. Sonst geht es nicht. Sorry an alle für die doofe Frage mit dem |.

Ich habe mal gelesen, weiß aber nicht mehr wo, das man die Anmeldung (ist ein form und wird mit POST gesendet) das man das machen kann ohne die Seite zu laden. Ich glaube das war mit Indy. Vielleicht weiß jemand ob ich hier gelesen habe.

gubbe 13. Mär 2024 12:47

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534565)
Ich habe mal gelesen, weiß aber nicht mehr wo, das man die Anmeldung (ist ein form und wird mit POST gesendet) das man das machen kann ohne die Seite zu laden. Ich glaube das war mit Indy. Vielleicht weiß jemand ob ich hier gelesen habe.

Ja, wenn das Login lediglich Benutzername und Passwort erwartet, kannst Du das auch direkt in Delphi senden mit einem HTTP-Request. Dann kommt in der Antwort evtl. ein Cookie zurück, was Du wiederrum mitsenden kannst beim Download.
Die Login-Seite müsstest Du nur selbst laden, wenn noch irgendeine Form von zusätzlichem Parameter erwartet wird, den die Seite selbst erzeugt, wie z.B. ein CSRF-Token.

himitsu 13. Mär 2024 13:14

AW: Wie "öffne" ich eine URL mit einem |
 
https://de.wikipedia.org/wiki/URL-Encoding

%7C anstatt |



z.B. TIdURI.URLEncode

DelTurbo 13. Mär 2024 13:21

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von himitsu (Beitrag 1534570)

Das war das erste was ich versucht hatte. Aber hat sich ja geklärt. Der Support hat "gelogen" das es mit wget gehen würde.

Eine Frage: Ich habe folgende HTML-FORM. Wie fülle ich die aus und wie geht es dann weiter? Muss ich die URL in action mit POST und den Daten aufrufen?

Code:
<form action="/loginPost" method="POST" id="login-form">
                <input name="form_key" type="hidden" value="Sg8D3DVpXGvFSoog">

                    <label for="">E-Mail-Adresse</label>
                    <input class="form-control required-entry" type="email" id="login-user" name="login[username]" placeholder="Ihre E-Mail-Adresse">
                    <label for="">Passwort</label>
                    <input class="form-control required-entry" type="password" id="login-password" name="login[password]" placeholder="Ihr Passwort">

                <button class="btn btn-primary btn-block" type="button" onclick="loginForm.submit()">Anmelden</button>
</form>
Oder soll ich diese Post wieder löschen und einen neuen Thread aufmachen?

gubbe 13. Mär 2024 13:31

AW: Wie "öffne" ich eine URL mit einem |
 
Da hast Du jetzt leider einen unsichtbaren Parameter namens "form_key", der sich wahrscheinlich bei jedem Aufruf ändert. Dann reicht ein POST nicht, sondern Du müsstest zuerst die Seite laden und den Key daraus ermitteln, um ihn im anschließenden Post mitzugeben.

Gibt es nicht vielleicht eine dokumentierte einfachere Möglichkeit, die Datei abzurufen oder die Login-Daten direkt beim Abrufen der Datei mitzugeben? Ich meine, wenn da zunächst wget als Lösung genannt wurde, müsste es doch auch einfacher funktionieren.

DelTurbo 13. Mär 2024 13:38

AW: Wie "öffne" ich eine URL mit einem |
 
Der support hat auf die anfrage ob man es ohne Login per wget laden kann, diese Antwort geschickt.

[antwort]
Hallo Herr ######,

klar, sie können über die URL: https://#####.de/#######/########/daten|export_v2.csv die Datei via WGET herunterladen 😊
[/antwort]

Ich denke mal da braucht man nix mehr fragen.

gubbe 13. Mär 2024 13:45

AW: Wie "öffne" ich eine URL mit einem |
 
Naja, bevor Du Dir jetzt viel Arbeit machst, würde ich dann doch mal nachhaken und darauf hinweisen, dass es per wget nicht geht, weil ein Login erforderlich ist. Vielleicht fragt der Support dann mal jemanden, der sich auskennt :-)

Vielleicht ist es auch einfach nur ein Konfigurationsfehler, dass für den Download ein Login erforderlich ist.

Oder wenn es ein Standardsystem ist, etwa ein Webshop oder ähnliches, kann man schauen, ob es beim Hersteller eine Doku gibt.

DelTurbo 13. Mär 2024 13:52

AW: Wie "öffne" ich eine URL mit einem |
 
Hi,
ich mache das nun so wie ich es hier gefunden habe. https://www.delphipraxis.net/544722-post1.html

Diesen Key kann ich mit WebBrowser1.OleObject.Document.Forms.item(0).Eleme nts.item('form_key').value einlesen.

Danke an alle.

jaenicke 13. Mär 2024 14:00

AW: Wie "öffne" ich eine URL mit einem |
 
Für einen simplen Download würde ich keinesfalls eine Browserkomponente verwenden, wenn nicht Skripte erforderlich sind!

Den Key kannst du auch per Indy IdHttp.Get abrufen und aus dem Quelltext lesen. Mit dem Cookiemanager kannst du auch Cookies nutzen. Und das Formular besteht nur aus Abfrageparametern, die du auch an Indy übergeben kannst.

gubbe 13. Mär 2024 14:02

AW: Wie "öffne" ich eine URL mit einem |
 
Klar, mit dem Browser geht das, ist nur keine besonders schlanke Lösung. Machst Du dann auch den Download damit?

Es erscheint auch nicht ganz zukunftssicher. Falls das Internet-Explorer-Control später aus Windows entfernt wird, musst Du umstellen auf Edge. Dann vielleicht lieber gleich damit machen?

DelTurbo 13. Mär 2024 14:08

AW: Wie "öffne" ich eine URL mit einem |
 
Das wird nur ein Tool was ein paar mal gebraucht wird und dann "vergessen" wird. Deswegen brauche ich bei dem Teil nicht so drauf achten ob es demnächst noch läuft.

@jaenicke,
du meinst also ich solle den Webseiten Quellcode laden und dann quasi zu fuß durchsuchen? Und ich weiß immer noch nicht was ich mit den Daten für eine URL aufrufen muss. Das was in action steht?

gubbe 13. Mär 2024 14:28

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534579)
Das wird nur ein Tool was ein paar mal gebraucht wird und dann "vergessen" wird. Deswegen brauche ich bei dem Teil nicht so drauf achten ob es demnächst noch läuft.

@jaenicke,
du meinst also ich solle den Webseiten Quellcode laden und dann quasi zu fuß durchsuchen? Und ich weiß immer noch nicht was ich mit den Daten für eine URL aufrufen muss. Das was in action steht?

Ja, würde ich auch so umsetzen. Post an Servername + /loginPost (was in Action steht) und als Parameter alles setzen, was im Form als Input steht. Dann sollte eine Antwort kommen mit einem Cookie im Header.
Kannst Du Dir auch vorher alles anschauen in den Webdeveloper-Tools vom Browser im Netzwerk-Tab und ggf. vorher mal mit Curl auf der Kommandozeile testen, ob es so funktionieren würde., bevor Du es mit Delphi umsetzt.

Rollo62 13. Mär 2024 16:22

AW: Wie "öffne" ich eine URL mit einem |
 
Hört sich nach Token oder ähnlich an.
Zum Rumprobieren könntest Du den RestDebugger der IDE verwenden, damit kann man eine ganze Menge ausprobieren und am Ende sogar eine Unit mit den Zugriffskomponenten erstellen lassen.
http://docwiki.embarcadero.com/RADSt...ebugger_(Tool)

Zu allem Überfluss sind die Sourcen auch noch vorhanden, unter
Zitat:

\Embarcadero\Studio\23.0\source\data\rest\restdebu gger\

DelTurbo 13. Mär 2024 16:26

AW: Wie "öffne" ich eine URL mit einem |
 
Eine Frage habe ich noch. Der TWebBrowser nutz leider den IE11. Die Webseite wo ich hinmuss läuft nicht damit. Ich habe soweit alles Fertig. Wie kann ich dem beibringen das er den Edge nutzt. Ich habe zwar auch WebView4Dwlphi installiert, aber da weiß ich leider nicht wie ich die form ausfüllen soll.

Vielen Dank im voraus

PS.: @Rolle62, ich habe Delphi 2007.

Rollo62 13. Mär 2024 16:30

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534586)
PS.: @Rolle62, ich habe Delphi 2007.

Ach, das ist doch auch kein Problem :-D
https://www.embarcadero.com/de/free-tools/rest-debugger

DelTurbo 13. Mär 2024 16:36

AW: Wie "öffne" ich eine URL mit einem |
 
Das ist zwar sehr nett gemeint, aber das Ding ist schon Fertig. Ich habe halt nur das Problem das ich nirgends finde wie man TWebBrowser "sagt" er soll Edge nehmen und nicht IE11. Da die Seite nicht auf IE11 läuft.

gubbe 13. Mär 2024 16:44

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534586)
Eine Frage habe ich noch. Der TWebBrowser nutz leider den IE11. Die Webseite wo ich hinmuss läuft nicht damit. Ich habe soweit alles Fertig. Wie kann ich dem beibringen das er den Edge nutzt. Ich habe zwar auch WebView4Dwlphi installiert, aber da weiß ich leider nicht wie ich die form ausfüllen soll.

Nur für das Login oder machst Du dann auch den Download über den Webbrowser?

Das Ausfüllen des Form (Username und Passwort) kannst Du ja mit einem Javascipt-Call machen. Schau Dir die Demo "Minibrowser" bei Webview4Delphi an und suche nach "ExecuteScriptWithResult".

Im Javascript musst Du die Inputs ansprechen, also etwa document.getElementById('login-user').value = 'Dein UserName'

gubbe 13. Mär 2024 16:46

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534588)
Das ist zwar sehr nett gemeint, aber das Ding ist schon Fertig. Ich habe halt nur das Problem das ich nirgends finde wie man TWebBrowser "sagt" er soll Edge nehmen und nicht IE11. Da die Seite nicht auf IE11 läuft.

TWebbrowser mit Edge geht nicht in Delphi 2007, aber Du hast ja schon Webview4Delphi entdeckt. Läuft das mit Delphi 2007?

DelTurbo 13. Mär 2024 16:48

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von gubbe (Beitrag 1534592)
TWebbrowser mit Edge geht nicht in Delphi 2007, aber Du hast ja schon Webview4Delphi entdeckt. Läuft das mit Delphi 2007?

Ja das läuft. Demo\SimpleBrowser habe ich am laufen.

DelTurbo 13. Mär 2024 17:04

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von gubbe (Beitrag 1534591)
Das Ausfüllen des Form (Username und Passwort) kannst Du ja mit einem Javascipt-Call machen. Schau Dir die Demo "Minibrowser" bei Webview4Delphi an und suche nach "ExecuteScriptWithResult".

Im Javascript musst Du die Inputs ansprechen, also etwa document.getElementById('login-user').value = 'Dein UserName'

Das läuft leider nicht auf Delphi 2007. Da muss man wohl einige uses ändern. Gibt es sonst keine Möglichkeit mit WebView4Delphi diese form auszufüllen. Mit TWebBrowser war das so "einfach".

gubbe 13. Mär 2024 17:07

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534594)
Das läuft leider nicht auf Delphi 2007. Da muss man wohl einige uses ändern. Gibt es sonst keine Möglichkeit mit WebView4Delphi diese form auszufüllen. Mit TWebBrowser war das so "einfach".

Sollte damit auch einfach sein. Wenn die SimpleBrowser-Demo läuft, probier doch mal den Javascript-Aufruf dort einzubauen.

DelTurbo 13. Mär 2024 17:15

AW: Wie "öffne" ich eine URL mit einem |
 
Leider habe ich keine Ahnung von Java. Was ich wohl hinbekomme würde das was du geschrieben hast.

document.getElementById('login-user').value = 'Dein UserName'

Aber wie Klicke ich? Muss ich da auch eine Schleife haben und den Anmelde Button suchen?

Sorry, nicht böse sein. Aber ich bin in Java ein echter DAU.

gubbe 13. Mär 2024 17:45

AW: Wie "öffne" ich eine URL mit einem |
 
Java ist hier nicht nötig, nur ein paar Zeilen Javascript, das ist was ganz anderes.

Du müsstest Dir in einem String in Delphi das Javascript zusammenbauen und dann im Browser aufrufen. Die einzelnen Elemente, die Du brauchst, kannst Du alle mit document.getElementById ansprechen. Die ID steht ja im HTML-Quelltext.
Den Button brauchst Du nicht. Der macht auch nichts anderes, als das Form abzuschicken mit "loginForm.submit()" und da hast Du auch gleich den Code, den Du brauchst.

Code:
document.getElementById("login-user").value = "[Dein Benutzername]";
document.getElementById("login-password").value = [Dein Passwort]";
document.getElementById("loginForm").submit();
Nur aus dem Gedächtnis, nicht getestet

Nur, wenn das so klappt, musst Du ja als nächstes die Download-URL aufrufen und an die Datei kommen. Funktioniert das schon?

DelTurbo 14. Mär 2024 09:26

AW: Wie "öffne" ich eine URL mit einem |
 
Huhu,
super vielen dank, ich werde es nachher Probieren. Muss leider erst einen Arzt Termin wahrnehmen.

Also wenn ich das per Browser mache klappt es. Damit ich denen nicht auf S*** gehe habe ich einfach mal die form genommen und in eine leere Seite gepackt. Diese habe ich dann hier Lokal auf einen Apache gespielt. Damit konnte ich das wunderbar Testen. Aber da fiel mir schon auf das die form die ID login-form ist (ich hatte dann den - rausgenommen) die aber loginForm aufrufen. Das kann halt der IE11 nicht.

Nochmal danke. Mal sehen ob es so klappt.

gubbe 14. Mär 2024 09:36

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534627)
Also wenn ich das per Browser mache klappt es. Damit ich denen nicht auf S*** gehe habe ich einfach mal die form genommen und in eine leere Seite gepackt. Diese habe ich dann hier Lokal auf einen Apache gespielt. Damit konnte ich das wunderbar Testen. Aber da fiel mir schon auf das die form die ID login-form ist (ich hatte dann den - rausgenommen) die aber loginForm aufrufen. Das kann halt der IE11 nicht.

Ja, das müsste dann auch in meinem Beispiel natürlich "document.getElementById("login-form").submit()" heißen. Wenn das der einzige Fehler im IE11 war, dann kannst Du auch damit das Form per Javascript abschicken lassen, aber Edge wäre natürlich zukunftssicherer.

DelTurbo 14. Mär 2024 09:45

AW: Wie "öffne" ich eine URL mit einem |
 
Nein, war nicht der einzige fehler. Da kamen zig Script Fehler. Ich habe es grade (da ich noch ein bissl Zeit habe) mit dem Simple Browser probiert. Laut Console findet er das auch nicht. Auch mit dem Aktuellen Edge geht es nicht weiter. Nun verstehe ich nix mehr. Oder ob loginForm ein Script ist was die aufrufen. Ich schau nochmal auf die Seite.

Fehler:
Code:
Failed to load resource: the server responded with a status of 404 (Not Found)
index.html:18  Uncaught ReferenceError: loginForm is not defined
    at HTMLButtonElement.onclick (index.html:18:102)

gubbe 14. Mär 2024 09:54

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534631)
Nein, war nicht der einzige fehler. Da kamen zig Script Fehler. Ich habe es grade (da ich noch ein bissl Zeit habe) mit dem Simple Browser probiert. Laut Console findet er das auch nicht. Auch mit dem Aktuellen Edge geht es nicht weiter. Nun verstehe ich nix mehr. Oder ob loginForm ein Script ist was die aufrufen. Ich schau nochmal auf die Seite.

Schwer zu sagen, ohne die Seite zu kennen. Die Seite funktioniert jetzt generell nicht, wenn Du sie im Edge in Delphi einbettest? Auch nicht, wenn Du den Button manuell anklickst?

Wenn Du willst, schick mir den Link zur Login-Seite per PN (ohne sonstige Daten natürlich) und ich schaue mal direkt. Sonst wird das hier auch zu lang im Forum glaube ich.

DelTurbo 14. Mär 2024 09:58

AW: Wie "öffne" ich eine URL mit einem |
 
Ich habe mir das gerade mit httrack geladen und lokal abgelegt. Klappt. Nun kann ich gleich schauen (wenn ich wieder da bin) ob das mit dem Java klappt.

DelTurbo 14. Mär 2024 12:35

AW: Wie "öffne" ich eine URL mit einem |
 
So,
also ich habe das mit der Demo SimpleBrowser probiert. Er füllt user und password aus, aber das "klicken" klappt nicht. Wenn ich dann mit der Maus auf Anmelden klicke komme ich sofort weiter. Das heißt er hat die Daten richtig eingetragen.

Achso, dieses LoginForm ist ein Script was aufgerufen wird.

Nun zur Kern frage, wie kann ich den Klick erzeugen?

Vielleicht noch eine Info, die form die ich in den ersten Beiträgen gepostet habe nimmt den "Klick" an. Aber da musste ich auch die action ändern. Die habe ich auf ein PHP umgeleitet damit ich sehe ob der die Parameter richtig übergeben hat.

gubbe 14. Mär 2024 12:40

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534642)
Achso, dieses LoginForm ist ein Script was aufgerufen wird.

Nun zur Kern frage, wie kann ich den Klick erzeugen?
.

einfach "loginForm.submit()" klappt nicht? Der Button macht ja auch nichts anderes.

DelTurbo 14. Mär 2024 12:42

AW: Wie "öffne" ich eine URL mit einem |
 
Das ist das was ich mache...

Delphi-Quellcode:
    WVBrowser1.ExecuteScript('document.getElementById("login-user").value = "#########";');
    WVBrowser1.ExecuteScript('document.getElementById("login-password").value = "#########";');
    WVBrowser1.ExecuteScript('document.getElementById("loginForm").submit();');

gubbe 14. Mär 2024 12:50

AW: Wie "öffne" ich eine URL mit einem |
 
Da, dann probier mal in der dritten Zeile das "loginForm.submit()", welches auch der Button auslösen würde.
Du kannst auch alle JavaScript-Befehle hintereinander in eine Zeile schreiben und mit einem ExecuteScript aufrufen.

DelTurbo 14. Mär 2024 12:53

AW: Wie "öffne" ich eine URL mit einem |
 
Ich habe es gefunden. Ich muss den id der form übergeben, also login-form dann klappt es.

1.000 Dank nochmal für deine Hilfe

Noch eine letzte Frage, wie sage ich dem ding wo er die Datei hin speichern soll. Die landet immer in Download.

DelTurbo 14. Mär 2024 13:39

AW: Wie "öffne" ich eine URL mit einem |
 
Ich dummerle,
das wird landet natürlich, weil ja der Edge genutzt wird, in der Directory die dort eingestellt ist. Ist nix eingestellt dann wohl in Download.

Nochmals Danke für alles

gubbe 14. Mär 2024 13:40

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534646)
Noch eine letzte Frage, wie sage ich dem ding wo er die Datei hin speichern soll. Die landet immer in Download.

Ich vermute ungefähr so:

WVBrowser1.Profile.DefaultDownloadFolderPath := [Pfadname]

gubbe 14. Mär 2024 13:43

AW: Wie "öffne" ich eine URL mit einem |
 
Zitat:

Zitat von DelTurbo (Beitrag 1534649)
Ich dummerle,
das wird landet natürlich, weil ja der Edge genutzt wird, in der Directory die dort eingestellt ist. Ist nix eingestellt dann wohl in Download.

Nochmals Danke für alles

Der Edge-Browser unter Windows und das Webview2 werden unabhängig voneinander installiert. Die Einstellungen sollten sich eigentlich nicht gegenseitig beeinflussen.

DelTurbo 14. Mär 2024 14:15

AW: Wie "öffne" ich eine URL mit einem |
 
Sorry das es gedauert hat. Ich musste erstmal das aktuelle Installieren, weil bei dem was ich drauf hatte gab es Profile nicht. Nun hab ich das auch und direkt probiert. Klappt einwandfrei. Ändert auch wirklich nix am Edge. :thumb::thumb::thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz