Door jmpDoor Anoniem op woensdag 26 maart 2008 13:01
quote:
--------------------------------------------------------------------------------
Door jmp
Eghie :
Dit zoek ik eignelijk alleen dan met linux header files.
--------------------------------------------------------------------------------
eh, telnet?
Daar was ik al op aan het zoeken met arpa/telnet.h maar is
even de vraag
hoe je de syntax command van GET index.html /1.0 verwerkt in
een applicate
die ook op de juiste manier 200 OK terug geeft.Met name de
relatie tussen de method get en een file descripter welke
gebruik je GET, SEND , SENDTO /
WRITE ?
Het is makkelijk gewoon een string aante roepen met daarin
GET / HTTP 1.0
en vervolgens de gehele header terug te krijgen. En een file
descripter aante roepen met send sendto. Maar waar ik
eigenlijk na zoek wat ik wel al gevonden heb in java om
alleen maar :
1. Te checken of het HTTP 1.0 of HTTP 1.1 is
2. Als het HTTP 1.0 is een reply teruk te krijgen van 200 ok
of een error 403
3. de verbinding te sluiten met een weergave connection-closed
Alleen dan in c.
Checken van HTTP 1.0 of HTTP 1.1 is niet nodig. HTTP is voor
zowel 1.1 als 1.0 zo goed als hetzelfde. Dus bij beide krijg
je hetzelfde terug.
Gebruik telnet als volg voor 1.1: (houd er rekening mee dat
die lege regel een extra enter/linefeed (CRLF) inhoud)
telnet host 80
GET / HTTP/1.1
of voor 1.0:
telnet host 80
GET / HTTP/1.0
GET haalt hierbij de webpagina op. Hij haalt / op. Wat je nu
hebt is alleen de request. Normaal stuurt je browser nog
verschillende headers mee. Die zou je onder de request
moeten aangeven voor de 2e linefeed.
Voorbeeld met browser headers voor HTTP/1.1:
Dit is ook met C/C++ te doen. Kwestie van een string in deze
variant naar de server gooien via een socket. Voor zowel
Linux, OSX, BSD, Windows, Solaris, etc is het hetzelfde
onder C++.
HTTP gebruiker CRLF als scheidingstekens voor regels. Dus
elke regel wordt afgesloten met: "rn". Dus komt dat
ongeveer in C++ eruit te zien:
stream << "GET / HTTP/1.1" << "rn";
stream << "Host: www.google.nl" << "rn";
stream << "User-Agent: Telnet" << "rn";
stream << "Referer: http://www.mijnvorigesite" << "rn";
stream << "X-pseudo-header: ok" << "rn";
stream << "rn"; //als afsluiting voor de headers.
Of gebruik dat write() voor of whatever. Ligt eraan hoe je
met de socket communiceerd.
Het uitlezen van de response gaat gewoon door de request te
splitten op 2xCRLF. Dus op "rnrn". Het 1e gedeelte zijn
de headers en het 2e de body. Maar dan heb je eigenlijk
alleen nog maar een hele simpele HTTP client.
Schijt waarom wordt hier een dubbele HTMLentities op uitgevoerd?