Webseite 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.
-
Sqwan schrieb:
In PHP? Da ist es möglich mich auf anderen seiten einzuloggen?
Ich stelle mir das in php gerade einfacher als in C/C++ vor.
c/cpp an für sich kann ich... Jedenfalls in der Console.
Na dann solltest du dir mal das von mir genannte Buch angucken...unter der Prämisse, dass du das wirklich etwas ernsthafter betreiben und nicht nur Codefragmente irgendwelcher Leute aus dem Internet zusammenklatschen willst.
-
aber das ist ja nicht meine seite. Was soll ich denn da machen?
An den Inhalt nicht geschützter seiten komme ich ja leicht dran mit PHP.
Aber das ich mich auf anderen seiten einloggen kann ohne sql-injections (kA ob das mit php geht) habe ich noch nicht gehört.@Berufspenner
Sicher mag dein Buch nicht schlecht sein. Nur ist es mir zu teuer, wo ich den Umfang noch nicht kenne. Jenach dem wenn ich da mal nen anfang habe, werde ich mir das vllt durchlesen, und das ganz mit einer GUI versehen.
-
Sqwan schrieb:
aber das ist ja nicht meine seite. Was soll ich denn da machen?
Wenn das PHP-Manual so gut ist, warum hast du's dann nicht benutzt um zu suchen was du brauchst?
Kennst du meinen Freund google schon? Damit hab ich folgendes z. B. sofort gefunden:
http://www.php.net/CLI
http://www.php.net/manual/en/ref.sockets.php
-
@Blue-Tiger
Diesen service werden wohl die wenigsten webserver einem normalen user zu verfügung stellen. Und ich glaube nicht, dass sich das jeder @ home installiert...
Aber egal... Wenn du mal durchgeschaut hast, fällt dir sofort auf, dass überall massig leicht zu verstehende Beispiele sind... Aber ich mag mich auch nicht drum kümmen welche doku nun besser ist, da wohl kaum jemand für mich die msdn ändert.so... nun back 2 topic... Ich habe nun soweit fertig was ich brauche... kann damit auch zu meinem Apache-Server connecten. Allerdings würde es mir nun helfen, wenn jemand ein kleines Beispiel zum ermitteln der IP-Adresse zu einer eingegeben url posten könnte. Da ist in dem Beispiel zwar ein fertiges, aber das verstehe ich garnicht. Schon alleine weil da so viel fehlerbehandlung drinne ist...
EDIT: Die PHP-Manual gibbet auch auf gutem Deutsch
-
Soa... ready...
Leider in C und ohne klasse... Jetzt hätte ich das aber gerne in einer klasse:class Lesen { public: long rc; SOCKET s; SOCKADDR_IN addr; void start_winsock() { this.rc=startWinsock(); if(this.rc!=0) { cout<<"Fehler: startWinsock, fehler code: "<<this.rc<<endl; return 1; } else { cout<<"Winsock gestartet!"<<endl; } } };
dummerweise gibt das einen Fehler:
z.B.: rc is not a type...Weiß jemand wie ich das ändern kann?
OOP in C++ habe ich lange nimmer gemacht...
Ich habe mich da mal ganz grob an java gehalten...
Da dürfte es funktionieren...
-
this->rc
-
In PHP gibts doch auch OOP... Zwar nicht so ausgeprägt, wie in C++, aber das sieht doch echt so aus, als ob du noch nicht mal wüsstest, wie man den PHP-tag aufmacht tT
Sqwan schrieb:
class Lesen { public: long rc; SOCKET s; SOCKADDR_IN addr; void start_winsock() { this.rc=startWinsock(); //fehler if(this.rc!=0) //fehler { cout<<"Fehler: startWinsock, fehler code: "<<this.rc<<endl; //fehler return 1; //fehler } else { cout<<"Winsock gestartet!"<<endl; } } };
this ist ein
Zeiger
- das heißt, dass du this-> schreiben musst - aber du kannst es auch einfach weglassen...Wie wärs mit so was:
(Ws2_32.lib nicht vergessen!)/*TODO: 1. SetIP (ip) und SetIP (url) 2. Connect 3. Empfangen (vll in nen Thread auslagern) 4. ErrorCodes in Exceptions umwandeln! */ class TSocket { private: SOCKET socket_number; public: TSocket () : socket_number (SOCKET_ERROR) { WSADATA wsaData; WSAStartup (MAKEWORD (2,2), &wsaData); }; };
In der offline-MSDN folgende Seiten: (würd ich so und so jedem empfehlen, die zu installieren...)
- WSAStartup function [Winsock]
- connect function [Winsock]
- Übersicht über Socketprogrammierung
- recv + send function [Winsock]
- _beginthreadex function
Lass mich raten: In deiner Freizeit schimpfst du über Windows, nennst es prizipiell Windoof und meckerst über Microsoft, so oft sich die Gelegenheit bietet, bist ein opensource-Fan, magst Linux etc?
Das ist sooo typisch... Ich habe keine 5 Minuten gebraucht, um dir die Artikel aus der MSDN zu suchen...Ich hätt auch in der online-MSDN suchen können, aber dann würdest du ja noch belohnt werden, für dein <ich bin zu doof google zu benutzten und mecker einfach alle voll, die mir nicht sofort die Lösung für mein Problem geben>
hf... bb
-
Da liegst du leider falsch...
Ich nutze Windows Vista, schimpfe so oft es geht über Linux, weil man ewig und 3 tage braucht um was sinnvolles zu installieren (bzw ich nicht gebacken bekomme).Was php angeht: <?php ?> oder <?= ?>
Je nach dem was man vor hat. In Java schreibt man nun mal this.
Aber hauptsache überheblich über die user fluchen, weil man ja ach so toll ist
aber es nicht auf die reihe bekommt etwas sachlich angemessen und verständlich zu erklären.Was das rc angeht... auch mit this->rc hats nicht geklappt.
Aber seit ich die funktion startWinsock() auch hinzugefügt habe funktioniert es.
Das ganze dingen ist jetzt in einer Klasse, die aber genausogut keine sein könnte.Was dieses Thema angeht...
Hier steht auf 3 seite FAST keine einzige für einen anfänger sinnvolle info.
Überall steht msdn, was man selber ja nicht findet... *ACHTUNG IRONIE*Und ich weiß, jetzt ist der arme user wieder der böse, der ja ach so unverschähmte fragen stellt...
So... Ich denke der/die richtigen fühlen sich schon angesprochen
so long
SqwanEDIT: Die alte Kuh so schnell vergisst, dass sie selbst mal Kalb gewesen ist
-
boar...
huch... da kommen ja gleich wahnsinnig viele echt nützliche ergebnisse - haben wir da was falsch gemacht? Oo
myself schrieb:
WSAStartup function [Winsock]
connect function [Winsock]
Übersicht über Socketprogrammierung
recv + send function [Winsock]
_beginthreadex functionich hab extra GANZ GENAU geschrieben, wonach du googlen musst...
Die alte Kuh so schnell vergisst, dass sie selbst mal Kalb gewesen ist
Hmm... Und ich hab (damals) niemanden gebraucht, der google für mich bedient - wenn das Kalb nicht weiß, wie es isst, dann wird es auch sterben und keine (alte) kuh werden... wenn du dich gegen jegliche eigeninitiative wehrst, dann wirst auch du kein programm schreiben können...
und evtl solltest du mal über meinen klasen-vorschlag nachdenken - wenn ich deinen post so lese, wirst du ja so was haben:
class asd { public: //private is ja eh doof... /*alle variablen, die man iwo man bekommt*/ /*funktionen - aber nicht logisch geordnet sondern um die jeweilige winapi-funktion drum rum*/ }
funktionen sollten immer nur eine bestimmte aufgabe übernehmen... die ausgabe bei nem fehler gehört dort gar nicht mehr mit rein...
So in etwa stell ich mir so ne Klasse vor...
int main () { tcp::clientsocket beispiel; beispiel.SetIP ("c-plusplus.net"); beispiel.SetPort (80); beispiel.Connect (); /*ich würd ne exception werfen (try/catch), aber du kannst auch nen bool zurückgeben (if (!Connect ()) std::cerr << "Fehler bla" << std::endl;*/ beispiel.Send (MakeHTMLheader (/*parameter*/)); std::string seite = beispiel.GetAllWithBlocking (); /*soll andeuten, dass keine Threads verwendet werden...*/ beispiel.Disconnect (); std::cout << seite << sd::endl; }
bb
-
Danke... Sowas empfinde ich als eine Hilfe, die man umsetzen kann.
Also. So in etwa wie es bei dir aussieht habe ich es schon.
Meine Variablen sind alle in Private:
und meine Funktion SetIP, da diese auschließlich von der Klasse genutzt wird.
Das kann ich aber auch noch abändern. dann kann ich sie wieder benutzen (was ja auch der sinn ist).Meine Fehlerausgabe ist zur Zeit in der Verarbeitung. Das werde ich ändern.
Meine Funktionsnamen entsprechen nicht ganz den deinen.
Ist aber durchaus sinnvoll: werde ich also übernehmen.Einen constructor habe ich zur Zeit nicht. Destructor fehlt auch.
Da muss ich nochmal in meinem Buch schaun wie das geht.__construct <-- So ists in PHP... Ich glaube hier wars anders.
so... nun ists das leider noch ziemlich viel C.
Jetzt ist die Frage:
Lohnt es sich das zu ändern?was ich auch nicht ganz verstehe ist:
sprintf(send_buf,"GET /%s HTTP/1.0", "www.google.de");
nun bin ich mir ziemlich sicher, dass erstens meine Headerinformation nicht korekt ist, und sprintf nicht korrekt ist (schließe ich aus einen post am anfang)kann mir da vllt noch mal ausgeholfen werden?