Zum Inhalt springen

HTML einlesen, aber eingeloggt


Waschi

Empfohlene Beiträge

Eine Frage an Programmiererfahrene.

Ich verwalte meine Cache in Access. Neue CH-Cache lese ich mit dem GPX-File ein, welches von E-SpArk zur Verfügung gestellt wird. Recht herzlichen Dank für den Service.

 

Das Problem ist jedoch der Update.

In VBA verwende ich die Function:

 

Public Declare Function URLDownloadToFile Lib "urlmon.dll" _

Alias "URLDownloadToFileA" ( _

ByVal pCaller As Long, _

ByVal szURL As String, _

ByVal szFileName As String, _

ByVal Reserved As Long, _

ByVal fnCB As Long) _

As Long

 

welche ich mit

 

retVal = URLDownloadToFile(0, URL, strTempFile, 0, 0)

 

aufrufe.

Es wird eine Datei gespeichert, welche ich dann einlesen kann.

 

Das Problem ist jedoch, dass ich eine HTML-Seite speichere, in der ich nicht eingeloggt bin und einige Daten fehlen.

 

Weiss jemand, wie ich das machen kann, dass die Seite im eingeloggtem Zustand gespeichert wird.

Ich behelfe mich vorläufig damit, dass ich im Firefox mit Rechtsklick auf der Seite die Seite speichere und dann diese Datei einlese.

Ich vermute, dass die meisten mit anderen Programmiersprachen arbeiten. Vielleicht kommt doch ein Tipp raus, was ich Grundsätzlich anderes machen muss.

 

Schon mal besten Dank für Eure Antworten.

 

Noch was.

Wenn ich in Firefox bei GC eingeloggt bin, kann ich weitere GC-Seiten aufmachen und bin auf diesen immer auch eingeloggt. Nur wenn ich die Seite via VBA-Programm aufmache (oben erwähnte Function) bin ich nicht eingeloggt.

 

Gruss Waschi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Grüezi Waschi,

 

Im Borland CBuilder verwende ich zur Anmeldung eine Konstruktion wie:

 

int pos = HTTP->Header.Pos("ASP.NET_SessionId=");

MainForm->session_id = HTTP->Header.SubString(pos+18, 24);

URLENC->InputString = lese_viewstate();

poststring = "__VIEWSTATE=" + URLENC->Encode + "&myUsername=" + anmeldename + "&myPassword=" + anmeldepw + "&Button1=Login";

...

HTTP->Post(http_befehl, poststring);

 

Aus dem Header (=Kopf) der HTML-Seite von geocaching.com lese ich die (mir zugeteilte) SessionId und das Feld viewstate aus und baue diese neu zusammen mit Anmeldename und Passwort. Die weiteren Zugriffe benutzen diesen Header und das funktioniert (zu meinem Erstaunen).

Weil ich die Zugriffe mit voller Anmeldung und als Premium Member durchführe, erhalte ich auch archivierte Caches - anstatt Werbung.

 

Das ist aber C++-isch, wie das auf VBA-isch lauten muss, weiss ich nicht.

 

Im Browser selbst werden Cookies ((un)heimliche Dateien) angelegt, um die Anmeldedaten von Zugriff zu Zugriff aufzubewahren.

 

Vielleicht hat jemand einen C++ - VBA - Übersetzer. :D

 

Algorithmus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Besten Dank für die Antwort.

Wenn ich ins Swissgeocache-Forum gehe, bin ich mit folgendem Aufruf im Brower

"http://forum.swissgeocache.ch/login.php?username=Waschi&userpw=xxxxxxxx"

immer gleich eingeloggt.

Ich stelle mir vor, dass das in Geocaching auch gehen könnte, nur weiss ich die genaue Syntax nicht.

 

Aus dem Header (=Kopf) der HTML-Seite von geocaching.com lese ich die (mir zugeteilte) SessionId und das Feld viewstate aus und baue diese neu zusammen mit Anmeldename und Passwort.

 

Frage: Aus welcher Seite liest Du diese Informationen raus?

 

poststring = "__VIEWSTATE=" + URLENC->Encode + "&myUsername=" + anmeldename + "&myPassword=" + anmeldepw + "&Button1=Login";

 

Das ist schon mal ein guter Ansatz

Wenn ich weiss, wo ich die Daten (obige Frage) her bekomme, mach ich mal hier weiter.

 

Sonst versuche ich es noch mit den Cookies, weiss aber nicht, ob das geht.

 

Gruss Waschi

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 8 Monate später...

Hallo Algorithmus,

ich versuche gerade, das mit PHP hinzubekommen. Klappt leider noch nicht.

Du schreibst, dass du Session und viewstate zusammenbaust. In deinem Poststring finde ich aber die Session nicht. Wie übergibst du diese ?

Verwendest du dann bei jedem Zugriff deinen poststring, also jedesmal ein Login, wenn du einen Cache suchst ?

 

Danke und Grüße

Christof

 

Im Borland CBuilder verwende ich zur Anmeldung eine Konstruktion wie:

 

int pos = HTTP->Header.Pos("ASP.NET_SessionId=");

MainForm->session_id = HTTP->Header.SubString(pos+18, 24);

URLENC->InputString = lese_viewstate();

poststring = "__VIEWSTATE=" + URLENC->Encode + "&myUsername=" + anmeldename + "&myPassword=" + anmeldepw + "&Button1=Login";

...

HTTP->Post(http_befehl, poststring);

 

Aus dem Header (=Kopf) der HTML-Seite von geocaching.com lese ich die (mir zugeteilte) SessionId und das Feld viewstate aus und baue diese neu zusammen mit Anmeldename und Passwort. Die weiteren Zugriffe benutzen diesen Header und das funktioniert (zu meinem Erstaunen).

Weil ich die Zugriffe mit voller Anmeldung und als Premium Member durchführe, erhalte ich auch archivierte Caches - anstatt Werbung.

 

Das ist aber C++-isch, wie das auf VBA-isch lauten muss, weiss ich nicht.

 

Im Browser selbst werden Cookies ((un)heimliche Dateien) angelegt, um die Anmeldedaten von Zugriff zu Zugriff aufzubewahren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Grüezi Christof,

 

Die Session-ID wird vom Cookie verwaltet, die brauche ich im Programmcode selbst nicht. Cookies müssen aber zugelassen werden.

Diese Anmeldung mache ich einmalig vor dem Datenzugriff.

 

Da ist zu beachten, dass die zugeteilte Session-ID nach einigen Minuten abläuft, wenn kein Zugriff bei www.geocaching.com damit gemacht wird. Dann muss eine neue Anmeldung ausgeführt werden und es wird eine neue Session-ID zugeteilt. Dies ist nötig, wenn das Programm nach der Anmeldung bis zum ersten Datenzugriff eine längere Verarbeitung ausführt, z.B. zuerst bestehende Daten sortiert oder im Debugger stehen bleibt.

 

Gruss Algorithmus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...