WebBrowser -> Quelltext einer Seite abfragen
-
Ich stehe nun seit einigen Stunden vor folgenden Problem:
Ich habe mir ein Memo-Feld, einen Button und ein WebBrowser im C++-Builder angelegt. Im Webbrowser habe ich eine Seite geladen. Nun möchte ich den Quelltext dieser Seite in das Memo-Feld kopieren.
Doch dafür fehlt mir überhaupt erst ein Ansatz.
Womit kann ich arbeiten und wie kann man das realisieren?Danke für die Hilfe!
-
verwende doch einfach mal die Suchfunktion mit dem Suchwort *WebBrowser* (einschließlich der Sterne) und dann hast du mehrere Threads zu diesem Thema
-
So habe die Suchfunktion verwendet (was ich auch schon vorher hatte, nur ohne Sterne) und ehrlich gesagt trotzdem keine Lösung für mein Problem gefunden, obwohl ich alle Threads durchgeklickt habe, die auch nur Ansatzweise etwas mit dem Problem zu tun haben hätten können.
Sollte ich wirklich was übersehen haben, bitte den Link zu dem Thread ansonsten will ich wirklich nur einen Ansatz bzw. eine Funktion, die dies ausgibt.
Was ich aber gefunden habe ist das arbeiten mit der IdHTTP-Komponente. Habe ich auch gleich ausprobiert und hier ist mein (kleines) Ergebnis:
String adresse; adresse = "http://www.internetseite.de"; RichEdit1->Lines->Add(IdHTTP1->Get(adresse)); IdHTTP1->CookieManager->AddCookie("CookieName=CookieInhalt", adresse); RichEdit2->Lines->Add(IdHTTP1->Get(adresse));
Das funktioniert schon wunderbar, das heißt RichEdit2 zeigt mir den Inhalt meiner Seite, wenn der User eingeloggt ist, RichEdit1 dagegen, wenn dieser ausgeloggt ist.
Mein aktuelles Problem ist, dass IdHTTP->Get(adresse) wirklich nur den HTML-Quelltext der Internetseite holt. Ich würde jedoch gerne auch den Header mitbekommen, um den Cookie auch dynamisch setzen zu können. Dazu muss ich sicher eine andere Funktion als Get auswählen, jedoch welche?Auf der Suche, wie ich Daten via Post an den Server senden kann bin ich auf den Code gestoßen:
char params[64]; TMemoryStream *InStream=new TMemoryStream(); TMemoryStream *OutStream=new TMemoryStream(); strcpy(params, "MY_VAR1=5&MY_VAR2=77"); OutStream->Write(params, strlen(params)); IdHTTP1->Request->ContentType="text/html"; IdHTTP1->Post("http://pm.profidata.de/cgi/pmforms.exe", OutStream, InStream); InStream->Position=0; Memo1->Lines->LoadFromStream(InStream); delete OutStream; delete InStream;
Bin ich mit dem Code auf der richtigen Spur? Das heißt, wird das PHP-Script, an das ich die Daten sende, auch 5 ausgeben bei $_POST['MY_VAR1']?
/edit: Habe letzteren Quellcode nun ausprobiert an folgender PHP-Datei:
<? header ("Content-Type: text/plain"); print_r ($_REQUEST); ?>
und es wird lediglich
Array ( )
augegeben
/edit2: Habe nun herausgefunden, wie die PostDaten erfolgreich übertragen werden können:
IdHTTP1->Request->ContentType="text/html";
muss in
IdHTTP1->Request->ContentType="application/x-www-form-urlencoded";
geändert werden und die PHP-Datei nimmt die Variablen erfolgreich an und gibt sie aus.
Jetzt möchte ich nur noch wissen, wie man den Header bei IdHTTP ausgegeben kann und dann bin ich glücklich(und mein Problem mit der Webbrowser-Komponente
)
-
z.B. dieser Thread: Website-Inhalt lässt sich nicht downloaden und dort der 3. Beitrag
oder in Webbrowser- Inhalt auslesen
-
Sorry
Ich hab einfach falsch gesucht. Habe nach einem Codebeispiel direkt hier im Forum gesucht. Den Artikel von bytesandmore kannte ich bereits und da dieser doch (für meine Kenntnisse) recht komplex war habe ich auf was einfacheres gehofft.Ich habe mich nun für die Indykomponente entschieden, da diese ja um einiges leichter ist, wenn man nur Inhalt herunterladen möchte.
Jedoch mein Problem mit dem Empfangen des Headers besteht immer noch.
Wie komme ich an diese Zeile:
Set-cookie: blabb=blubb, domain=seite.de
-
Hat sich jetzt erledigt. Wusste nicht, dass Indy automatisch Cookies annimmt und die für den weiteren Verlauf behält.