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

11

08.01.2014, 21:27

Muss ich das nur EINMAL durch den Parser jagen, oder bei jedem neuen Programmstart, bzw Login? Muss das ein spezieller Parser machen, oder kann ich mir auch ein Programm schreiben (gleich in das Loginprogramm integrieren), dass den HTML-Code lesen kann und dann nach der Stelle sucht? Firefox sendet noch einen "lsd" Code, was ist damit, muss der auch herausgefunden werden?
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

12

08.01.2014, 21:41

Du musst schlichtweg die Startseite laden. Alle Cookies von dort übernehmen und alle versteckten Input-Felder für den Login. WIE Du die Werte daraus liest, das ist Deine Sache. Aber da Dein Programm sich einloggen soll, wäre es wohl logisch, wenn Dein Programm die Startseite vor dem Login runter lädt und die Werte sucht und in das nächste Request überträgt. Du kannst entweder selbst per IndexOf nach dem Spaß suchen, den Du brauchst, oder per regular expressions.
Ich glaube all das wurde nun aber auch schon dreimal erzählt.
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

13

08.01.2014, 21:44

So, ich hab das mal manuell gemacht. Mein Programm gibt mir den HTML-Code der Login Seite aus und ich suche mir dann die beiden "Keys" raus und Teile sie dem Programm, das solange wartet mit. Dann werden die beiden Strings in PostData (so heißt der String, siehe Beitrag mit Code) eingefügt und losgeschickt.

Zurück kommt ... so ein S*****: Cookies akzeptieren. :(

Ich poste nochmal den jetzigen Code:

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
#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/login.php?login_attempt=1"));
    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();
    //Hier werde ich aktiv und öffne die Datei. Um die beiden Codes dann einzugeben.
    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;
}
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

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

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

14

08.01.2014, 21:45

@BlueCobold: Hab gerade deine Antwort bemerkt. ;)

EDIT: Nach dem Lesen deines Beitrags wurde mir klar, das ich das gemacht hab, was du wolltest, passt Chronologisch also doch. :D
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

15

09.01.2014, 06:34

Nein. Soweit ich das sehe, fragst Du zweimal die login.php ab. Das ist absolut nicht das, was Dir hier gesagt wurde.
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]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

16

09.01.2014, 08:15

Wesentlich einfacher wäre es mit Awesomium oder PhantomJS.
Da diese einen kompletten Browser simulieren, musst du dich um solche Dinge wie Cookies gar nicht kümmern.

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

17

09.01.2014, 21:04

@David: Danke für die Links! Das Problem ist nur, dass das Programm die Requests später übelst schnell verschicken muss. Das versuche ich dann auch ohne das Net Framework. Wenn ich mich also nich um Cookies kümmere, dann werd ich das später auch nicht in C++ hinbekommen.

@BlueCobold: Ohh sorry, ich hab das anders Verstanden. Und als ich die erste Request abgeschickt hab, wurden auch noch keine Cookies zum Server geschickt. Es kamen nur welche zurück. Da hab ich mich bestätigt gefühlt. Ich werde jetzt für das erste Mal die "facebook.com" verwenden.
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

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

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

09.01.2014, 22:35

@David: Danke für die Links! Das Problem ist nur, dass das Programm die Requests später übelst schnell verschicken muss. Das versuche ich dann auch ohne das Net Framework. Wenn ich mich also nich um Cookies kümmere, dann werd ich das später auch nicht in C++ hinbekommen.

Ich glaube kaum, dass die Programmlogik den Flaschenhals darstellen wird.
Viel eher deine Internetverbindung bzw. die Verbindung zu Facebook. Es sollte relativ egal sein, mit welcher Sprache du das machst.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

10.01.2014, 07:19

Man kann ihm trotzdem raten sich von C++/CLI zu entfernen und direkt C# zu verwenden ;) C++/CLI ist eben nur für einen einzigen Zweck existent und genau den braucht er hier nicht.
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]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

20

10.01.2014, 08:39

Er sollte das nehmen, womit er sich am besten auskennt, bzw. womit es für ihn am einfachsten umsetzbar ist.

Werbeanzeige