[C++] Website Login und Buttondruck

Jonas Meyer

Mitglied
Hallo,
Ich möchte gerne ein Programm schreiben was auf eine Seite geht und ein Bottom drück und sich vorher anmeldet kennt ihr ein Tut dafür? Achja ich möchte es in Hintergrund haben also nur ein Konsolen Fenster öffen haben also nichts mit Auto-Klickern oder so...

PS:Ich habe kein Thema gefunden und weiß nicht wie das heiß könnt mir ja Link schicken falls ich was übersehen haben und das doch Doppel Post ist...

mfG
Jonas
 
Hallo,
also erstmal würde ich dir empfehlen etwas auf die Rechtschreibung zu achten, denn ich verstehe nichtmal genau was du überhaupt willst.
Wenn du eine grafische Benutzeroberfläche mit Buttons willst, dann kann ich dir nur eine Bibliothek empfehlen, die das beinhaltet. Qt bietet das und hat auch eine gute Dokumentation und Tutorials.

Grüße Jennesta
 
Hi

ich versteh: Du willst ein Programm, das sich automatisiert auf einer Website mit Login anmeldet und dann einen Button auf der Seite automatisiert drückt.

Stimmt das so?
Die Vorgehensweise dazu ist von Seite zu Seite unterschiedlich;
die Url und der betroffene Button wären also interessant.
 
Linux/Windows?

Mit Sockets sollte sowas gehen, wenn's ein [unsichere] GET login ist, ist's einfacher, wenn's ein POST ist ist es schwieriger. Du müsstest nur eine Anfrage mit dem richtigen Inhalt verschicken.
Und wie sheel schon sagte: Welche Seite? Es gibt keine Musterlösung, du müsstest also für jede Seite einen eigenen Code schreiben.

Gruss
cwriter
 
Ok also ich möchte unter Windows(7) mit C++ ein Konsolenanwendung schreiben die ein Webseite "öffnet" also das kein Browser sich öffnet das ich nicht davon mitbekomme. Cwriter hat ja was von Sockets geschrieben hat da jemand ein Buch was alles was mit Internet zu tun hat erklärt. Am besten wo so was ähnliches gemacht wir das was ich vorhabe.

Achja es ist nur eine Idee von mir was ich vielleicht mal brauchen könnte also nicht bestimmtes also Facebook oder so....

mfG
 
Also, Sockets wären natürlich eine Möglichkeit, aber unnötig umständlich.
Wenn man sich den HTTP-Aufbau sparen will: cUrl.

Was man braucht:
Login: Je nach Seite einen Request mit GET/POST-Daten absenden und zB. ein Cookie empfangen.
Button: Mit dem Cookie (der was sonst zur Auth verwendet wird) nochmal ein GET/POST-Request.
Die passenden Formularnamen sind aus der Seite zu entnehmen.
 
Den Browser öffnen und ihn unsichtbar machen, das geht 100% mit der WinAPI.
Aber ich bin mir gerade nicht sicher, ob man dann noch einen Klick simulieren könnte...

http://www.c-plusplus.de/forum/169861-full ist auf den ersten Blick eine ziemlich ausführliche Erklärung für Sockets.

Aber eine fertige Bibliothek (z.B: cURL) ist natürlich viel einfacher für dein Vorhaben!
 
Öhm, nein!? Du steuerst ja dann auch nicht die Website, oder?
Weisst du was? Ich zeige einfach mal einen Code mit Sockets (von c-programmieren.com):
C:
#include <windows.h>
#include <winsock2.h> 
#pragma comment(lib,"ws2_32.lib")
#include <stdio.h> 

int main() 
{ 
SOCKET Socket; 
SOCKADDR_IN Adressinfo; 
char Antwort[1024];
LPHOSTENT lpHostEntry; 
long Verbindung;
WSADATA wsa;

char Nachricht[256]; 
sprintf(Nachricht, "GET /index.html HTTP/1.0\nHost: www.c-programmieren.com\n\n" ); //Hier Website ändern / IP eintragen
//Anfrage
// Winsock starten

Verbindung=WSAStartup(MAKEWORD(2,0),&wsa);
if (Verbindung != NO_ERROR) 
{ 
printf("WSAStartup ist fehlgeschlagen: %d\r\n", Verbindung);
}

// Socket erstellen 
Socket=socket(AF_INET,SOCK_STREAM,0); 

memset(&Adressinfo,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 

Adressinfo.sin_family=AF_INET; 
Adressinfo.sin_port=htons(80); // HTTP = 80 
Adressinfo.sin_addr.sin_addr = inet_addr("100.100.100.100"); //Ip der Website
Verbindung=connect(Socket,(SOCKADDR*)&Adressinfo,sizeof(SOCKADDR)); 
if ( Verbindung == SOCKET_ERROR) 
{
printf("Verbindung ist fehlgeschlagen!\n");
system("Pause");
closesocket(Socket);
WSACleanup();
}

Verbindung=send(Socket,Nachricht,strlen(Nachricht),0); 
if (Verbindung == SOCKET_ERROR) 
{
printf("Die Nachricht konnte nicht verschickt werden: %d\r\n", WSAGetLastError());
system("Pause");
closesocket(Socket);
WSACleanup();
return 0;
}
else
{
printf("Die Nachricht %s wurde verschickt!\n",Nachricht);
}

while(Verbindung!=SOCKET_ERROR) 
{ 
Verbindung=recv(Socket,Antwort,1023,0); 
if(Verbindung==0) 
{ 
printf("Server hat die Verbindung getrennt..\n"); 
break; 
} 
if(Verbindung==SOCKET_ERROR) 
{ 
printf("Fehler bei Empfangen: %d\n",WSAGetLastError()); 
break; 
} 
Antwort[Verbindung]='\0'; 
printf("\nAntwort:\n\n %s\n\n\n",Antwort); 
} 
closesocket(Socket); 
WSACleanup(); 
system("Pause");
return 0; 
}
Ich habe es ausprobiert; auf dem VC++ Express 2010 SP1 funktioniert's.

@sheel
cUrl ist doch eine externe lib (nicht von Microsoft)? Es gibt doch auch noch WinInet, aber ich bin mir nicht sicher, ob die dafür geeignet ist. Ich werde mal nachschauen.

/EDIT: WinInet scheint ähnlich zu sein wie cURL: httpRequest() & co. sind alle vorhanden.

Gruss
cwriter
 
Zuletzt bearbeitet:
Ja, WinInet ist vom Sinn her das Gleiche, kann aber weniger als cUrl.
Und ja, cUrl ist extern und nicht von MS.
 

Neue Beiträge

Zurück