Webseite auslesen
-
Schönen guten Tag
Und zwar habe ich folgendes Problem. Ich habe einige Foren, über die ich mir infos hole. Dafür muss ich immer in die Foren. Würde mich interessieren, wie ich mit C/C++ erst die startseite auslesen kann, und mich danach einloggen kann um mich dann weier dadurch zu navigieren. Die seiten würden dann auf die gesuchten infos gefiltert.
Leider finde ich dazu bisher nichts...
Hat vllt jemand einen link zu einem E-Book, das mir da weiter helfen könnte, oder vllt sogar ein tutorial?MFG Sqwan
-
Hi,
Das machst du mittels TCP Sockets (www.c-worker.ch) und dem HTTP Protokoll.
Das HTTP Protokoll kannst du im RFC nachlesen.MFG ReduX
-
hm... ich habs mal versucht... aber dev-c++ heult beim Compilieren...
#include <windows.h> #include <winsock2.h> #include <stdio.h> #include <stdlib.h> int main() { SOCKET s; SOCKADDR_IN addr; struct hostent *hp; unsigned long int ip; char send_buf[256]; ip = inet_addr("http://c-plusplus.net"); hp = gethostbyname("http://cplusplus.de"); s=socket(AF_INET,SOCK_STREAM,0); sprintf(send_buf,"GET /%s HTTP/1.0",ip); send(s,send_buf,strlen(send_buf),0); return 0; }
Der sacht:
Linker error: undifined reference to inet_addr@4
und sowas an mehreren stellen...
vllt kann mir da jemand helfen...MFG Sqwan
-
dev-c++ ist veraltet und wird nicht mehr weiter entwickelt.
Code::Blocks oder VS 2008 Express verwenden.Hat aber nix mit deinem Problem zu tun.
Simon
-
Ich bin auf der arbeit... Da habe ich kein VS und kanns auch nicht einfach installen...
-
Wende dich einfach an deinen Admin, sag ihm, dass du gerne mit Werkzeugen aus diesem Jahrtausend arbeiten möchtest und empfehle ihm direkt das VS Express. Die Admins, die ich kennengelernt habe, machen dann, wenn ihre eigene Arbeit sich auf ein Programm installieren beschränkt, meistens keine Probleme.
Zu deinem konkreten Problem:
Du solltest die verwendete Library mit den Winsockfunktionen auch linken. Bei mingw war das AFAIK -lws2_32 oder -lwinsock
-
Sqwan schrieb:
Ich bin auf der arbeit... Da habe ich kein VS und kanns auch nicht einfach installen...
Dann beschwer dich bei der IT dass ihr veraltete IDEs und Compiler einsetzt
des weiteren strotzt dein Code von C-Relikten bzw. ist reiner C-Code
Unter anderem sind die C-header stdio.h und stdlib.h im C++-Standard veraltet, das mindeste was du tun solltest ist die Verwendung der header <cstdio> und <cstdlib>, dort sind die selben Funktonen im namespace std vorhanden. (mal abgesehen davon dass ich keine Funktion aus stdlib sehe)
Der nächste Punkt ist sprintf, was weder typsicher ist noch Schutz vor bufferoverflows bietet. Alternativen sind snprintf() als overflow-sichere C-Routine, stringstreams bzw. strstreams mit Typsicherheit bzw. boosts lexical_cast<> der den Stringstream wrapt.Was deine eigentliche Problemstellung angeht gibts Bibliotheken die C++-Schnittstellen für Netzwerkdinge bieten an Stelle der winsock C-API, z.B. boost::asio
Zu guter letzt ist das Kexyword struct vor hostend in C++ überflüssig - allerdings ist das das letzte i-Tüpfelchen um aus deinem Code ein C-Programm zu machen. Du bist nicht zufälligerweise im falschen Forum gelandet oder?
-
^^ ich glaube nicht, dass die mir hier ne Entwicklungsumgebung für c/cpp installieren. Wenn ich einen Webserver oder so brauche, dann sicher, aber wir arbeiten mit PHP und net mit c/cpp... Das brauche ich mehr oder weniger Privat...
Was das linken angeht, kann man das denn bei Dev-C++ einstellen?
EDIT: Leider bin ich nicht wirklich in der Lage C von Cpp zu unterscheiden.
In der schule wurde uns sowas net gezeigt (War auch keine für cpp sondern eher für PHP)
-
Was das linken angeht, kann man das denn bei Dev-C++ einstellen?
Ja.
-
gut... und ich habe es auch schon gefunden...
einen fehler bekomme ich bis jetzt nicht...Wie kann ich denn den Stream jetzt auslesen?
-
Sqwan schrieb:
Wie kann ich denn den Stream jetzt auslesen?
mit recv(..) und am schluss clossocket(..) nicht vergessen...
Simon
-
Also ich steige da echt nicht durch... Das ist echt kompliziert...
Naja... Also ich denke das sind die Befehle ich dafür brauche:- SOCKET s;
- char* url;
- gethostbyname()
- socket()
- connect()
- sprintf() <-- verwaltet? was ist besser?
- send()
- recv()
Leider kann ich mir daraus aber nicht wirklich was bauen
Aber ich versuch mal nen anfang:class ReadSite { public: private: SOCKET s; char* url; void con2site() { s=socket(,,); //Hier sollte ich vllt prüfen ob es einen gibt, aber wie? connect(s,,); //Hier wäre es nicht schlecht die connection iwie su speichern } }
Ich denke mal wenn nichtmal das klappt, wirds mit dem rest auch nichts...
Leider kenne ich von den beiden Funktionen nicht die parameter...
Vllt kann mir da jemand weiter helfen...
-
Sqwan schrieb:
Vllt kann mir da jemand weiter helfen...
Ich kenn mich da nicht so aus, aber 'n guter Freund von mir: www.gidf.de.
-
tolle sache... den Kenne ich auch...
Spar die deine unqualifizierte Antwort und lösch hier deinen acc.
Gibt ja eh alles bei google.
-
Such in der Doku der Socket Lib.
Z.B. MSDN, da steht wir recv(..), send(..) etc. funktioniert.
Hat manchmal auch Bsp. dabei...
-
Sqwan schrieb:
tolle sache... den Kenne ich auch...
Spar die deine unqualifizierte Antwort und lösch hier deinen acc.
Gibt ja eh alles bei google.Naja, so unqualifiziert war die Antwort gar nicht, denn wenn man die Socketprogrammierung ernsthaft und das bei einem gewissen Maß an Sicherheit, im Sinne von Security, betreiben will, dann sollte man sich fundierte Kenntnisse aneignen und nicht von einem Onlinetutorial zum nächsten übergehen. Damit gewinnt man keinen Blumentopf. Zumal es mit Grundkurs Socketprogrammierung mit C unter Linux einen super leichten Einstieg in die Materie gibt. Und sag jetzt nicht, dass du nicht Linux benutzt...mit drei Zeilen Code kannst du alle Beispiele aus dem Buch auch unter Windows ausführen.
PS: Wenn es eh nur für den privaten Gebrauch gedacht ist, dann weiß ich nicht, wie dein Chef reagiert, wenn du sowas am Arbeitsplatz machst
-
Ich habe nichtmal eine Verbindung. Und ich habe ein Beispiel:
getpage.c
Da gibbet dann nurnoch das Problem, dass ich das überhaupt nicht verstehe,
was aber wichtig ist wenn ich eine Software neu/umgestalten bzw erweitern möchte.
Deshalb wollte ich das Problem schritt für schritt angehen, und so wenig wie möglich mit Variablen hantieren und den schritt bei dem ich grade bin dann auch verstehen.Und wenn man was verstehen möchte ist msdn.de keine Doku sondern eine krankheit.
PHP beispielsweise hat eine doku bei der sich msdn was abgucken könnte...
-
Sqwan schrieb:
Da gibbet dann nurnoch das Problem, dass ich das überhaupt nicht verstehe, was aber wichtig ist wenn ich eine Software neu/umgestalten bzw erweitern möchte. Deshalb wollte ich das Problem schritt für schritt angehen, und so wenig wie möglich mit Variablen hantieren und den schritt bei dem ich grade bin dann auch verstehen.
Wie weit ist es denn mit deinen Kenntnissen in C++ bzw. (da Sockets) in C her? Hast du keinen Schimmer von der Sprache selber oder von der Materie der Socketprogrammierung? Wenn ersteres, dann solltest du die Sprache, in der du arbeiten willst, erstmal grundsätzlich lernen und das geht nicht von jetzt auf gleich. Ist es letzteres, dann guck dir bitte mein vorletztes Posting bzw. das Buch, das ich dir dort empfehle, an.
PS: Du könntest dein Vorhaben doch auch prima in PHP umsetzen
-
Und wenn man was verstehen möchte ist msdn.de keine Doku sondern eine krankheit.
Denk, das liegt nicht an der Doku, sondern am leser.
simon
-
In PHP? Da ist es möglich mich auf anderen seiten einzuloggen?
c/cpp an für sich kann ich... Jedenfalls in der Console.