Entwickler-Ecke
Internet / Netzwerk - Internet Seite parsen ?
OliverN_26 - Mo 17.10.11 10:34
Titel: Internet Seite parsen ?
Hallo
Ich möchte 2 Werte in Formular Felder einer Internetseite senden, diese bestätigen und die Folgeseite dann wiederum interpretieren. Ich benötige diese Informationen für einen Datenimport, da dieser Vorgang momentan händisch läuft. Kann ja eigentlich nicht so schwer sein 2 Formularfelder aus Delphi raus zu befüllen, oder?
Die Internetseite sieht wie folgt aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| <div class="contentBody"> <form id="orderDetails" method="post" action="/MWIA/fc.htm?_flowExecutionKey=_cF3DF0F5F-5AC9-AA49-EF94-AD2B84B3E4F0_k85A54B9C-7754-52D4-5A84-D82AC4895810"><br> <label for="techId">Techniker Nummer</label><br/> <input id="techId" name="techId" style="-wap-input-format: '5N'; -wap-input-required: true;" type="text" value="" maxlength="5"/><br><br/> <--- 1. Feld <label for="woId">Auftragsnummer</label><br/> <input id="woId" name="woId" style="-wap-input-format: '6N'; -wap-input-required: true;" type="text" value="" maxlength="6"/><br/><br/> <--- 2. Feld <input type="submit" class="button" name="_eventId_login" value="Bestätigen"/><br/><br/> <input type="hidden" name="tek" value="SCH" /> </form> </div> |
Beispiel: 1.Feld = 123 2.Feld = 456
Wie fange ich so was an?
Mal so nebenbei. Hier wird nichts illegales gemacht. Ich brauche lediglich eine Auswertung einer Auftragsnummer, was leider immer per Hand eingetragen werden muß.
Danke
Andreas L. - Mo 17.10.11 11:49
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| uses ..., IdHTTP;
var http: TIdHTTP; params: TStrings; result: String; begin http := TIdHTTP.Create(nil); try params := TStringList.Create; try params.add('techId=1234'); result := http.post('http://www.domain.com/script.php', params); finally FreeAndNil(params); end; finally FreeAndNil(http); end; end; |
EDIT: Moment mal, irgendwie kam mir dein Name bekannt vor:
http://www.delphiforum.de/viewtopic.php?t=106809
Was soll dieser Thread wenn du schon weißt wie es geht? :?
Horschdware - Mo 17.10.11 11:55
OliverN_26 hat folgendes geschrieben : |
Quelltext 1:
| action="/MWIA/fc.htm?_flowExecutionKey=_cF3DF0F5F-5AC9-AA49-EF94-AD2B84B3E4F0_k85A54B9C-7754-52D4-5A84-D82AC4895810"> |
|
Nach diesem "flowExecutionKey" sollte man evtl noch schauen. Bleibt der in dieser Anwendung immer gleich oder wird der bei jedem Besuch neu generiert, oder....?
Btw: Ich sehe gerade beim Schreiben, was Andreas noch hinzugefügt hat.
Warum machst du hier einen neuen Thread auf, der das gleiche Problem behandelt, das in einem alten Thread von dir schon gelöst wurde?
Sehr merkwürdig...
OliverN_26 - Mo 17.10.11 12:18
Ähm .. ?!
Ich glaub ich steh etwas auf dem Schlauch. Wieso ist dass das Gleiche?
Bei meinem alten Thread hab ich Werte aus Delphi an ein PHP-Script geschickt, was diese Daten dann in die Datenbank sendet.
JETZT will ich aber 2 Formularfelder einer Internetseite mit Werten füllen, den OK Button auf der Internetseite drücken und schauen wie die Auswertung aussieht.
Andreas L. - Mo 17.10.11 12:22
Selbes Prinzip? Du sendest Daten an eine Internetseite und wertest das Ergebnis aus. Wenn du im Browser auf den Submit-Button des Formulars klickst, passiert auch nichts anderes*.
* = Es sei denn die Seite verwendet JavaScript. Dann musst du einen TWebBrowser verwenden und automatisieren, siehe Forum-Suche.
OliverN_26 - Mo 17.10.11 12:27
ah ok .. dumme Frage: Wird der OK-Button automatisch ausgelöst? Wo landet denn die Ergebnisseite? Das interpretieren dieser Ergebnisseite passiert dann in "script.php" ?
P.s.: Die Seite verwendet kein Javascript.
Horschdware - Mo 17.10.11 13:25
Bei diesem Prinzip gibt es keinen "OK"-Button.
Wenn du auf einer Webseite (HTML) ein Formular ausfüllst und auf "OK" klickst, dann werden die eingegebenen Daten per HTTP POST oder GET an einen Service / ein Programm / PHP Script / whatever geschickt, welches dann mit diesen Daten arbeitet.
Wenn du ein Programm wie hier oder in deinem anderen Beispiel schreibst, dann baust du dir die Anfrage selbst zusammen und schickst diese selbst an deinen Verarbeiter.
Konkret schaut das so aus, dass du im Endeffekt lediglich eine neue "Seite" aufrufst. Ob das nun die "index.htm" oder "start.php" oder "rechnewas.php" ist - es ist immer ein Seitenaufruf. Bei der Übermittlung von Daten via GET wird einfach etwas an die URL gehängt, bei Übermittlung via POST wird dem HTTP Request etwas angehängt.
Wikipedia weiss dazu auch etwas zu sagen:
http://de.wikipedia.org/wiki/Http
Für dich heisst das nun: In deinem Programm die gewünschte Seite aufrufen und entsprechende Parameter übergeben wie in deinem anderen Thread. Fertig.
PS: Stichwort am Rande: "HTTP-Redirect" könnte noch interessant sein
OliverN_26 - Mo 17.10.11 13:46
Hmm ..
Wenn ich dich richtig verstehe sollte die folgende Methode doch eigentlich gehen oder stell ich mich grad einfach zu dämlich an, da ich das noch nie gemacht habe?!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Button1Click(Sender: TObject); var sl : TStringList; test : String; begin sl := TStringlist.Create; sl.Add('techId=123'); sl.Add('woId=456');
try test := IdHTTP1.Post('https://www.domain.com',sl); except Application.MessageBox('Fehler','Information',MB_ICONWARNING); Exit; end;
sl.Free; end; |
Leider bekomm ich unten angezeigte Fehlermeldung :-(
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
Horschdware - Mo 17.10.11 14:04
OliverN_26 hat folgendes geschrieben : |
Hmm ..
...oder stell ich mich grad einfach zu dämlich an, da ich das noch nie gemacht habe?! |
Du hast das doch schon gemacht!
Siehe:
http://www.delphiforum.de/viewtopic.php?t=106809
Du hast jetzt in dieser aktuellen, neuen Situation nur eine andere URL und andere Parameter, die du übergibst. Der Rest ist doch identisch!
edit: Wo tritt diese Fehlermeldung auf? Hast du die Intercept-Property gesetzt, wenn du schon mit HTTPS arbeitest?
Andreas L. - Mo 17.10.11 14:12
Bei gesicherten Verbindungen (https) musst du der Eigenschaft IOHandler eine SSL-IO-Handler-Komponente zuweisen.
OliverN_26 - Mo 17.10.11 14:12
Kannst du mir zu dem Fehler was sagen?
In meinem Beispiel würde dann also in "test" der komplette HTML-Quellcode stehen (wäre ja genau was ich will) ?
---
Moderiert von
Narses: Beiträge zusammengefasst---
Hallo Andreas
wie sieht das anhand von einem Beispiel aus?
Hab noch nie mit SSL-Verschlüsselungen gearbeitet :-(
Andreas L. - Mo 17.10.11 14:21
OliverN_26 hat folgendes geschrieben : |
Hallo Andreas
wie sieht das anhand von einem Beispiel aus?
Hab noch nie mit SSL-Verschlüsselungen gearbeitet :-( |
Also bitte, ein bisschen Eigeninitiative wäre angebracht... :roll:
Komponentenliste durchblättern, TIdSSLIOHandlerSocketOpenSSL aufs Formular ziehen und bei TIdHTTP zuweisen.
OliverN_26 - Mo 17.10.11 14:27
Klappt nicht. JEtzt findet er eine SSL-Bibliothek nicht --> siehe Anhang
Andreas L. - Mo 17.10.11 14:30
Du brauchst die beiden DLLs libeay32.dll und ssleay32.dll. Findest du 100% bei Google. Müssten aber auch im Indy-Paket enthalten sein.
Horschdware - Mo 17.10.11 14:35
Den Indy-Komponenten liegt (bis mind. Version 9 - eben lokal geprüft) eine Textdatei bei, die den Umgang und den Verbleib der DLLs klärt (wo herunterladen, wo speichern, etc...).
OliverN_26 - Mo 17.10.11 15:14
Jetzt bekomme ich einen Bibliotheken-Fehler. Ich nutze Delphi 7 Enterprise mit Indy 9. Sollte doch damit eigentlich gehen oder muß ich da von anfang an was anders machen? Ich bin kurz vorm verzweifeln :-(
Andreas L. - Mo 17.10.11 16:32
OliverN_26 hat folgendes geschrieben : |
Jetzt bekomme ich einen Bibliotheken-Fehler. |
Welchen Fehler? Was sagt Google oder die Forensuche? Hast du auch die richtigen DLLs?
OliverN_26 hat folgendes geschrieben : |
Ich nutze Delphi 7 Enterprise mit Indy 9. |
Die aktuelle Indy Version ist 10, ein Update kann also nicht schaden. Vllt. gehts dann sogar, wer weiß...
http://www.indyproject.org/Sockets/Download/Files/Indy10.DE.aspx
OliverN_26 - Mo 17.10.11 17:26
Meine DLL's waren falsch. Hab sie verworfen und versuch nun die aktuellste Version (10.5.8 ?) zu installieren.
Ich habe "OpenSSL v1.0.0e" runter geladen, allerdings setzen die DLL's mindestens Indy 10.5.5 voraus. Nur irgendwie finde ich das nirgens im Netz?
Dein Link beschränkt sich auch nur auf 10.0. Scheint als ob da einige Server tot sind. Wo kann ich mir die aktuellste Version runter laden?
Google liefert da weniger den erwünschten Erfolg :-( Ich denke eine Readme.txt, wie ich das zu installieren habe wird da wohl dabei sein oder?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!