• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

[DEV] gc.com fetching mit SSL/TLS Paket

mcbernie

Geocacher
Und ich schon wieder.

Bitte haut mir auf die Finger wenn ich was falsches sage / mache, denn ich habe die SpiderGC.java soweit angepasst das ein login und fetching der gc.com seite wieder möglich ist.

Neben dem Ausbauen der cookie geschichte musste ich die Postdaten anpassen:
Code:
					sb.append("__EVENTTARGET=&__EVENTARGUMENT=&"); // added for testing 
					sb.append("__VIEWSTATE=" + URL.encodeURL(viewstate, false));				
					sb.append("&ctl00%24SiteContent%24"); // changed from 24BodyContent to 24SiteContent
					sb.append("tbUsername=" + encodeUTF8URL(Utils.encodeJavaUtf8String(pref.myAlias))); // changed myUsername to tbUsername
					sb.append("&ctl00%24SiteContent%24");
					sb.append("tbPassword=" + encodeUTF8URL(Utils.encodeJavaUtf8String(passwort))); // changed myPassword to tbPassword
					sb.append("&ctl00%24SiteContent%24");
					sb.append("cbRememberMe=on");
					sb.append("&ctl00%24SiteContent%24");
					sb.append("btnSignIn=Login"); // changed Button1 to btnSignIn

Hier wurde bei gc einiges geändert. (sieht für mich so aus als hätten die Kollegen die Code gesäubert ;-) )

Es gibt allerdings noch komische Erscheinungen!
So wird manchmal die Seite nicht erreicht und manchmal gibt es eine EOF exception.
Klingt so als wenn da was mit dem HttpClient nicht so rund läuft.

Achtung, cookie setzen funktioniert nicht!
Bedeutet: bei jedem Cache neuer login (und da das nicht immer auf anhieb geht :/ ....


Gruß, mcbernie :D
 

Anhänge

  • SpiderGC.zip
    28,3 KB · Aufrufe: 10
OP
M

mcbernie

Geocacher
So, ich hab jetzt zunächst einmal den Fehler gefunden weshalb nach jedem Herunterladen erneut angemeldet wurde:

1) in pref.xml muss bei dem element spider forcelogin="false" sein
2) hatte ich in spidergc.java einen Fehler eingebaut. (korrekte Version liegt im Anhang)

Desweiteren habe ich den Fehler lokalisiert weshalb eine Verbindung zur Login-Seite nicht auf anhieb funktioniert (ewe.io.IOException bei login).
Es scheint in HttpConnection.java an der funktion waitOnIO zu liegen

Code:
//	===================================================================
private Object waitOnIO(Handle h,String errorMessage) throws IOException
//	===================================================================
{
	try{
		h.waitOn(Handle.Success);
		return h.returnValue;
	}catch(Exception e){
		if (h.errorObject instanceof IOException) throw (IOException)h.errorObject; // Hier raised der fehler
		else throw new IOException(errorMessage);
	}
}

auch ein kleiner counter welcher 5mal waitOnIO nach einer Exception aufruft hilft da nicht wirklich ;)

Aber wenn man ein paar mal das aktualisieren Markierter Einträge ausgewählt hat, gehen dann auch alle folgenden!

Gruß,
 

Anhänge

  • SpiderGC.zip
    28,2 KB · Aufrufe: 14

MiK

Geoguru
Ich habe Deinen Code jetzt noch nicht probiert.
Auf jeden Fall war die Idee für den Fall, dass wir https können folgende:
Wir versuchen die gespeicherte userid zu nutzen. Wenn sie nicht mehr funktioniert, dann loggen wir uns über https ein und merken uns die neu erhaltene userid. Damit geht dann alles viel schneller als bei einem erneuten Login. Der muss dann nur einmal im Monat (oder so) gemacht werden.
 

schwaller

Geocacher
... und auch das verhalten entspricht dann mehr dem, was mensch hinter tasttatur vor bildschirm mit browser meistens amchen wird. oder anders, ich denke die allermeisten werden sich nicht jedes mal neu anmelden, sondern das häkchen bei "angemeldet bleiben" gesetzt haben und somit auf die cookies zurückgreifen.

einer der stärken der spiderengine vom cw ist ja gerade das exakte nachbilden des menschlichen verhaltens (soweit sinnvoll und möglich) und der versuch, bei allem möglichst weng serverlast zu erzeugen.

... und so finde ich es klasse, das hier gemeinsam am code gearbeitet wird. gemeinsam ideen entwickelt und auch lösungsvorschläge eingebracht werden
 
OP
M

mcbernie

Geocacher
Soweit klar,
das sich cw jedesmal neu angemeldet hat, war auch ein fehler den ich beim umbau eingebaut habe!

Sprich, die Version hier arbeitet mit https (dank pfeffer) und meldet sich ohne eine userid (umständlich händisch) aus dem Browser zu holen und lädt dann beliebig viele sachen ohne neuanmeldung herunter..

Nur wenn man cw neustartet brauch meldet sich cw erneut bei gc.

Wenn da nur nicht das Problem wäre, das man heufiger am anfang die aktualiserung aufrufen muss bis eine dann einmal ohne exception durchgeht...
Gruß,
 

pfeffer

Geowizard
Großartig, dass Du Dich gleich drangesetzt hast!

mcbernie schrieb:
Wenn da nur nicht das Problem wäre, das man häufiger am anfang die aktualiserung aufrufen muss bis eine dann einmal ohne exception durchgeht...
Gruß,
Ich habe selbst leider gerade sehr wenig Zeit. Wichtig wäre herauszufinden, an welchem Umständen es liegt, dass eine Exception geworfen wird. Vielleicht hilft da, die Verbindung mit Wireshark zu beobachten.
Vielleicht auch mit anderen Servern mal probieren.

Gruß,
Pfeffer.
 

arbor95

Geoguru
Finde den Einsatz auch super. Bin die nächsten 2 Wochen dann ohne Internet im Urlaub! Bis dann viel Erfolg.
 

schwaller

Geocacher
hmm - nur mal so als idee
ist es möglich den userid cookie zu gewinnen und an passender stelle in die pref.xml einzufügen.
wenn die anmeldung dann so gemacht wird, das "angemeldet bleiben" virtuall angehakt ist, wäre das ganze doch recht brauchbar.

1) vorteil - man macht automatisch möglichst wenig neuanmeldungen
2) ist man einmal drin - bleibt das auch über einen neustat erhalten.
3) das kommt dem normalen userverhalten am nächsten
4) user sind "gewohnheitstiere" - alle die sich an das prozedere mit dre userid gewöhnt haben, können dieses erstmal weiterhin so durchführen ;)

ablauf so in etwa:
wenn keine userid -> neuanmeldung
wenn userid vorhanden - anmeldeversuch bzw versuch zu spidern
- geht - dann fröhliches spidern
- geht nicht, dann ->neuanmeldung
wenn anmeldung mit bestehender userid fehlschlägt -> neuanmeldung

neuanmeldung - wenn erfolgreich -> userid in pref.xml schreiben -> fröhliches spidern


ich hoffe das das prinzip dahinter einigermassen rübergekommen ist.
 

arbor95

Geoguru
so würde ich es einbauen / hätte ich es eingebaut, wenn ich aus dem Urlaub zurück bin. Wenn das dann schon fertig ist, dann habe ich auch nichts dagegen.
 
OP
M

mcbernie

Geocacher
Guten Tag liebe Leute!

Nach vielen Tests, scheint es so als wenn die Verbindungsprobleme nur beim Login auftauchen! Hat definitiv nichts mit der Cachewolf seite zu tun sondern wohl eher von GC seite aus !

-Jetzt gibt es eine neue login Methode die die alte maximal 5 mal aufruft (retry). (Die alte Methode habe ich in origin_login umbenannt.)
-Bei erfolg wird die userid in den prefs gespeichert.
-Ein Retry wird dem Benutzer im Info-Bereich angezeigt.
-Die Languagefiles habe ich nicht geändert, für die neue Meldung habe ich 5523 als ID gewählt.
- Dokumentiert habe ich meines erachtens auch jede Änderung.
- Getestet habe ich es auch... Aber mehr ist immer Gut ;)

Neue SpiderGC liegt im Anhang!

Anbei, DRY ist mir ein Begriff nur habe ich es bei der neuen login methode nicht ganz angewendet :)


Gruß,
 

Anhänge

  • SpiderGC.zip
    28,4 KB · Aufrufe: 20

pfeffer

Geowizard
mcbernie schrieb:
Nach vielen Tests, scheint es so als wenn die Verbindungsprobleme nur beim Login auftauchen! Hat definitiv nichts mit der Cachewolf seite zu tun sondern wohl eher von GC seite aus !
Welches sind genau Deine Wireschark Erkenntnisse? - CacheWolf schickt immer die Gleiche Anfrage, aber GC antwortet einfach manchmal nicht?

mcbernie schrieb:
-Jetzt gibt es eine neue login Methode die die alte maximal 5 mal aufruft (retry). (Die alte Methode habe ich in origin_login umbenannt.)
-Bei erfolg wird die userid in den prefs gespeichert.
-Ein Retry wird dem Benutzer im Info-Bereich angezeigt.
-Die Languagefiles habe ich nicht geändert, für die neue Meldung habe ich 5523 als ID gewählt.
- Dokumentiert habe ich meines erachtens auch jede Änderung.
- Getestet habe ich es auch... Aber mehr ist immer Gut ;)
Wunderbar!
mcbernie schrieb:
Anbei, DRY ist mir ein Begriff nur habe ich es bei der neuen login methode nicht ganz angewendet :)
Mir nicht - was ist das?

Gruß,
Pfeffer.
 
OP
M

mcbernie

Geocacher
Nabend!

Also, ich hab soviel Rausbekommen, das die letzten Daten die von Geocaching.com ankommen plötzlich unterbrochen werden. Somit wirft das Handle / Thread welches die Daten abruft bei inp.read (intputstream) eine exception.
Da die Kommunikation aber SSL verschlüsselt ist, bekomm ich auch durch wireshark keine direkten erkenntnisse (ich bin ein wireshark novice) aber durch extrem debugging ( viel Konsolen Ausgaben schritt für schritt) konnte ich lokalisieren das es ein plötzlichen Abbruch bei der Verbindung gibt!
Das aber nur beim Login!

Mit 5 retries ging es aber immer!

DRY = Don't Repeat Yourself - http://de.wikipedia.org/wiki/Don’t_repeat_yourself
In der login Methode habe ich an 3 Stellen das gleiche geschrieben, hätte man auslagern müssen in eine Methode.
Oder die Methode anders schreiben müssen ;)
Ich hab es aber nicht gemacht, weil es an den stellen eventuell verschieden Code geben soll / geben muss...
 

Engywuck

Geowizard
Also mein aktueller Stand ist: Mit Rev. 3073 gehts bei mir (ohne User-ID) nicht. Die Fehlermeldung im Log ist
Code:
04.09.2011/11:50:22.234: [login]:Could not fetch: gc.com login page
ewe.io.IOException: URL: https://www.geocaching.com/login/default.aspx
http response code: 501
Gruß,
E.
 
Oben