Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

21

11.01.2014, 17:16

Ich versteh das ja, das ihr meint, dass ich nicht ein SO schnelles Programm brauche. Ist jetzt auch ja egal, ich finds für euch unwichtig zu wissen, wofür meine Programm ist.
Er sollte das nehmen, womit er sich am besten auskennt, bzw. womit es für ihn am einfachsten umsetzbar ist.

Ich habe mich für low-level C++ entschieden, aber weil ich das damit noch nie gemacht hab, werde ich es zuerst mal mit dem .NET Framework machen, weil ich dieses sehr gut kenne.
Also, wenn ich das mal so sagen darf, ich fände es cool, wenn ihr meine Entscheidung nicht beeinflussen würdet, sondern mir eher beim Lösen der Aufgabe mit C++/CLI helfen würdet!

Ich habe jetzt auf BlueCobold's Bemerkung hin mein Programm so verändert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "Main.h"

int main()
{
    //Parameter abfragen bei User
    Console::WriteLine("HTTP-Konsole für Facebook");

    Console::WriteLine("\nUsername:");
    String^ Username = Console::ReadLine();
    Console::WriteLine("\nPassword:");
    String^ Password = Console::ReadLine();

    //Sicherheits-Codes herausfinden über Cookies
    HttpWebRequest^ Request_1 = dynamic_cast<HttpWebRequest^>(WebRequest::Create("https://www.facebook.com/"));
    Request_1->Method = "POST";
    Request_1->UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0";
    HttpWebResponse^ Response_1 = dynamic_cast<HttpWebResponse^>(Request_1->GetResponse());
    CookieCollection^ Collection_1 = Response_1->Cookies;
    StreamReader^ ResponseReader_1 = gcnew StreamReader(Response_1->GetResponseStream());
    String^ ResponseString_1 = ResponseReader_1->ReadToEnd();
    StreamWriter^ Writer_1 = gcnew StreamWriter("Response_1.html");
    Writer_1->Write(ResponseString_1);
    Writer_1->Close();
    Console::WriteLine("lgnrnd");
    String^ lgnrnd = Console::ReadLine();
    Console::WriteLine("lgnjs");
    String^ lgnjs = Console::ReadLine();

    //Anmeldung ausführen
    String^ PostData = "lsd=AVpdl8H1&display=&enable_profile_selector=&legacy_return=1&profile_selector_ids=&trynum=1&timezone=-60&lgnrnd=" + lgnrnd + "&lgnjs=" + lgnjs + "&email=" + Username + "&pass=" + Password + "&default_persistent=0";
    ASCIIEncoding^ Encoding = gcnew ASCIIEncoding();
    array<Byte>^ PostBytes = Encoding->GetBytes(PostData);

    CookieContainer^ PostCookies = gcnew CookieContainer();
    PostCookies->Add(Collection_1);

    HttpWebRequest^ Request = dynamic_cast<HttpWebRequest^>(WebRequest::Create("https://www.facebook.com/login.php?login_attempt=1"));
    Request->Method = "POST";
    Request->UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0";
    Request->CookieContainer = PostCookies;
    Request->ContentType = "application/x-www-form-urlencoded";
    Request->ContentLength = PostBytes->Length;

    Stream^ PostStream = Request->GetRequestStream();
    PostStream->Write(PostBytes, 0, PostBytes->Length);
    PostStream->Close();

    HttpWebResponse^ Response = dynamic_cast<HttpWebResponse^>(Request->GetResponse());

    StreamReader^ ResponseReader = gcnew StreamReader(Response->GetResponseStream());
    String^ ResponseString = ResponseReader->ReadToEnd();

    Console::WriteLine(Response->StatusDescription);
    Console::WriteLine("Response.html wird geschrieben...");
    StreamWriter^ Writer = gcnew StreamWriter("Response.html");
    Writer->Write(ResponseString);
    Console::WriteLine("... Fertig mit schreiben!");

    Writer->Close();
    ResponseReader->Close();
    Response->Close();

    Console::ReadLine();

    return 0;
}

Ich habe das ausprobiert, aber ich bekomme immernoch die Meldung: "Cookies aktivieren". :( Da stimmt doch was viel grundlegenderes für die Cookies!? Was mach ich falsch. Bitte nicht ungehalten werden, wenn ich was von euch gesagtes übersehen hab. Ich mach das zum ersten mal und hab noch nicht so viel Erfahrung mit HTTP-Requests und Cookies. Was hat es denn mit dem LSD-Tag auf sich im PostData String - da wird doch noch ein Code übergeben? Diesen kann ich in der HTML-Datei aber nicht finden.
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

22

11.01.2014, 17:25

C++/CLI ist kein C++. Nur nochmal um es klar zu machen. Du lernst damit also auch kein C++. Es handelt sich dabei auch kein Stück um "low level C++".
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

23

11.01.2014, 17:51

Nee C++ lernen will ich nicht, das kann ich schon ausreichend. Ich wollte damit auch nur gegen Davids Vorschlag argumentieren, ein Programm zu verwenden, das mir die "arbeit" mit Cookies abnimmt. Weil ich befürchte, dass das zu langsam ist (warum ist egal). Darum will ich reines C++ verwenden, aber nicht sofort, sondern ein "zwischending" - .NET Framework. Um einen Überblick über die HTTP Sache zu bekommen.

C++/CLI ist kein C++. Nur nochmal um es klar zu machen. Du lernst damit also auch kein C++. Es handelt sich dabei auch kein Stück um "low level C++".

Das habe ich schon verstanden!

Können wir das jetzt lassen und lieber mit dem Cookies-Problem weitermachen?
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

24

11.01.2014, 19:08

Mal versucht wirklich ALLE Felder korrekt zu befüllen? Z.B. auch den Referer?
Der lsd-Code steht im Head der Seite in einem Java-Script:

Quellcode

1
2
<meta charset="utf-8" /><script>function envFlush(a) .... "lsd":"AVrhTqQb"....... />
    

Aber auch im Formular:

Quellcode

1
<input type="hidden" name="lsd" value="AVrhTqQb"
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (11.01.2014, 19:22)


CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

25

12.01.2014, 15:29

Danke!

ALLE Felder
Dafür habe ich die Firefox-Facebookanfragen mal genauer analysiert:

Wenn die Seite "https://de-de.facebook.com/" angefragt wird, wird noch kein Cookie gesendet. Die Felder die gesendet werden, konnte ich alle in meinem Programm befüllen, bis auf "DNT" und "Accept-Language". Es gab dafür keine HttpWebResponse-Eigenschaften - muss ich die in eine WebHeaderCollection schreiben?
Zurückgeschickt bekommt Firefox vier Cookies:
- datr
- reg_ext_ref
- reg_fb_gate
- reg_fb_ref
-> Die bekomme ich auch von meinem Programm zurückgeschickt. Der erste Teil scheint also schonmal richtig zu sein. :)

Wenn dann die Seite "https://www.facebook.com/login.php?login_attempt=1" angefragt wird, schickt Firefox folgende Cookies mit:
- _e_0uWD_0 (dieser Name ändert sich bei einer neuen Anfrage)
- act
- datr
- reg_fb_gate
- reg_fb_ref
- wd
Für die drei vorletzten Cookies habe ich ja die passenden Werte bekommen, aber wo finde ich die Werte für die anderen Cookies? Das Formular habe ich durchsucht - da hab ich nichts gefunden. Auch hier konnte ich alle Felder befüllen, bis auf die oben genannten.
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

26

13.01.2014, 14:07

Auch wenn du es nicht hören willst;) Du hast David falsch verstanden. Er hat gesagt, dass der Flaschenhals (die Stelle an der das ganze langsam wird) nicht dein Code oder das Programm sein wird sondern wohl eher die Internetverbindung auf deiner Seite bzw die Verbindung zum Facebook Server allgemein. Wenn ein Programm schon genau das tut was du möchtest, dann stellt sich auch die Frage ob du das wirklich schneller umsetzen kannst, vor allem wenn dir noch Erfahrung fehlt. Bedenke das vielleicht. Ist natürlich ok dass du das selbst machen willst. Nur wenn fertige Dinge schon zu langsam sind dann solltest du dir überlegen ob es Alternativen für dein Problem gibt. Ohne dein eigentliches Problem zu kennen können wir hier nicht helfen, aber du selbst kannst dir ja Gedanken machen ob man dein Problem auch mit "langsamer Verbindung" lösen kann.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Tobiking

1x Rätselkönig

  • Private Nachricht senden

27

13.01.2014, 14:43

Wenn es dir nur um Facebook geht, könntest du dir auch mal die FB API angucken. Das ist deutlich einfacher und schneller als mit der Webseite rumzuhampeln. Mal davon abgesehen, dass sich die API nicht wie die Seite regelmäßig vom Aufbau ändert.

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

28

13.01.2014, 20:43

Ich wollt ja eigentlich nichts mehr dazu sagen, aber was solls ich bin halt so:

Das ist doch die Antwort auf mein Vorgehen mit .NET:
Nur wenn fertige Dinge schon zu langsam sind dann solltest du dir überlegen ob es Alternativen für dein Problem gibt.

Ich mag halt nur Bibliotheken (so nenn ich David's Vorschlag-Programme mal), deren Quellcode ich kenne, wenn ich schon welche außer das Framework von Microsoft benutze. Darum bin ich auch David sehr dankbar (!!! nicht böse sein, weil ich nicht Awesomium nehme), dass er ein Buch über seine Engine geschrieben hat, weil ich sie gut finde und benutzen will (siehe meine anderen Projekte). Und weil ich das Framework schon auf meinem Rechner (256 kB/s Download - ich hab da Stunden gesessen!) hab, es durchschaue und es nach schneller Suche auch die benötigten Funktionen stellt, hab ich mich dafür entschieden. Außerdem mag ich es überhaupt nicht, wenn mir ein Programm etwas abnimmt, was man nicht versteht - Das wäre für mich dann der Fall, wenn es sich automatisch um Cookies kümmert. (@Tobiking: Das wäre bei so einer API auch der Fall und ich will die Sache nicht nur für FB machen)

Ohne dein eigentliches Problem zu kennen können wir hier nicht helfen, aber du selbst kannst dir ja Gedanken machen ob man dein Problem auch mit "langsamer Verbindung" lösen kann.
Sorry aber ihr kennt mein Problem doch? Ich krieg ne Meldung vonwegen "Cookies aktivieren". Wollt ihr mir dabei nicht einfach helfen? Ich kanns auch in C# machen, wenns euch da leichterfällt.

PS: Zum Flaschenhals Problem will ich leider nichts sagen!
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

29

13.01.2014, 21:53

Es geht nicht darum, dass Dir keiner helfen will. Tipps und Vorschläge wurden ja schon einige gemacht. Aber ohne genauere Analyse wird sich das Problem wohl scheinbar nicht lösen lassen. Und so viel Zeit kann und will eben niemand investieren. Das liegt nicht an Dir, sondern das ist generell. Ich jedenfalls setze mich nicht 2 Stunden hin und fange an die Facebook-Seiten und -Scripte zu parsen, um einen Login simulieren zu können.
Wenn die Requests von Dir dieselben richtigen Parameter schicken, die auch ein normaler Browser-Login schickt, ist Dein Problem auch gelöst. Das wurde Dir ja aber auch schon mehrfach gesagt.
Uns zu unterstellen, dass Dir niemand helfen will, finde ich an der Stelle daher ehrlich gesagt etwas frech.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

30

13.01.2014, 22:59

Ich denke auch, das grobe Vorgehen kennst du, die Seite und deren Verhalten musst dann vermutlich du allein untersuchen. Das ist nun mal zeitintensive Arbeit die wenig Spaß macht. Dass du nur Dinge benutzen möchtest deren Quellcode du kennst ist an sich auch ein Trugschluss. Du benutzt so viel was du nicht kennst und nicht verstehen wirst, aber das ist ein anderes Thema und das Problem haben viele am Anfang und verlieren es mit der Zeit. Du schränkst dich damit halt selbst ein und wirst so irgendwann nicht besonders gut weiter kommen. Aber wie gesagt, das merkst du mit der Zeit vielleicht selbst.
Das du zu deinem eigentlichen Programm nichts sagen findest finde ich auch ziemlich merkwürdig. Kann sich ja jeder selbst Gedanken zu machen was du da wohl vorhaben könntest. Ob das für dich vorteilhaft ist ist eine andere Frage;)
Naja wenn dein Problem dann ist, dass diese Meldung angezeigt wird, dann hast du ja im Prinzip hinreichend Hilfestellungen bekommen und kannst dich jetzt intensiv mit Facebook und Facebooks Frontend Quellcode auseinander setzen. Viel Erfolg;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige