...und Action!
Hallo zusammen,
ich habe mir eben 'Beej's Guide to Network Programming' duchgelesen und mir sowohl einen kleinen Server als auch einen kleinen Clienten geschrieben, die bereits kurz darauf fröhlich miteinanden kommunizierten. Als nächstes nahm ich dann Kontakt zum Webserver meines Vertrauens auf. Port 80 war der verabredete Treffpunkt, er trug eine rote Rose, ich erkannte ihn sofort und nach kurzer Zeit stand die Verbindung. Tja und wie es beim ersten Date nunmal so ist, herrschte betretenes Schweigen.Ich wusste nicht was ich sagen sollte und er hatte die ganze Zeit diesen "Los frag mich endlich was"-Blick drauf. Gerade als die Situation zu eskalieren drohte fand ich den rettenden Hinweis. "Versuchs mit GET !". Gesagt getan. Die Kommunikation lief im Prinzip auch reibungslos, nur waren die Anworten nicht immer die, die ich mir gewünscht hatte...
Nun konkret zu meiner Frage:
Wie genau muss ich meine GET Anfrage formulieren?
Häufig ist mir "GET /HTTP/1.0" begegnet, allerding liefern mir die meisten Server daraufhin:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.2.16 (Debian) Server at atrops.eu Port 80</address>
</body></html>
Ich habe mir daraufhin den RFC2616 in groben Zügen durchgelesen. Dort heisst es man kann die Anfrage direkt unter Angabe des vollständigen Pfades stellen, also zb "GET http://www.testurl.org/forum/viewtopic.php?f=21&t=4641".
Obwohl ich nicht verstehe warum ich den vollen Pfad angeben muss, wenn bereits eine Verbindung zu http://www.testurl.org:80 besteht, hat das in einigen Fällen funktioniert.
Häufig bekam ich allergings:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://board.anotherfail.de/tn20.htm">here</a>.</p>
</body></html>
obwohl die Adresse sich über einen Browser einwandfrei direkt anwählen lässt.
"GET /forum/irgendeinthread.htm HTTP/1.1"
funtionierte garnicht, obwohl das laut RFC2616 ebenfalls klappen sollte und für mich auch die logischste Variante war.
Sofern ihr wisst wo ich mehr Informationen darüber finde oder ihr ein wenig dazu erzählen möchtet, wäre ich euch sehr dankbar.
Ansonsten eine super Seite hier, muss ich sagen! Es ist schön, wenn man sich mit Gleichgesinnten austauschen kann.
Ich bin zwar erst seit Kurzem dabei, aber C Programmierung macht einfach enorm Spass.
mfG LittleE
Webseiten auslesen die Zweite..
-
- Beiträge: 3
- Registriert: Di Okt 25, 2011 6:58 pm
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Webseiten auslesen die Zweite..
Grüße und willkommen im Forum!LittleEndian hat geschrieben:...und Action!
Hallo zusammen,

MoonGuy hat geschrieben:Port 80 war der verabredete Treffpunkt, er trug eine rote Rose, ich erkannte ihn sofort und nach kurzer Zeit stand die Verbindung.

Nach GET folgt der Pfad: "/", dann ein Leerzeichen und dann das Protokol mit Version "HTTP/1.0"MoonGuy hat geschrieben:Nun konkret zu meiner Frage:
Wie genau muss ich meine GET Anfrage formulieren?
Häufig ist mir "GET /HTTP/1.0" begegnet, allerding liefern mir die meisten Server daraufhin:
Du kannst mit dem Telnet-Client spielen. Nach der Eingabe von GET musst Du 2x Return drücken. Bitte keine Korrekturen... viele Webserver mögen es nicht, wenn man sich vertippt. ^^
Code: Alles auswählen
ambassador:~ xin$ telnet proggen.org 80
Trying 188.40.193.143...
Connected to proggen.org.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Tue, 25 Oct 2011 22:17:42 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze3
Vary: Accept-Encoding
Content-Length: 3447
Connection: close
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<HTML>
...usw...
Das geht nicht:LittleEndian hat geschrieben: Ich habe mir daraufhin den RFC2616 in groben Zügen durchgelesen. Dort heisst es man kann die Anfrage direkt unter Angabe des vollständigen Pfades stellen, also zb "GET http://www.testurl.org/forum/viewtopic.php?f=21&t=4641".
Du kannst nicht den einen Server fragen, was er Dir per http-Protokoll von einem anderen Server holen soll.
Es gilt nach GET immer der Pfad der Domain, die Du angesprochen hast.
Nun gibt es aber Virtual Hosts, damit das dann klappt tippst Du Dein GET ein und gibst zusätzlich den Host an, den Du abfragen möchtest.
Code: Alles auswählen
GET /index.html HTTP/1.0
Host: example.com
Da sollten sich antworten finden lassen, da ich selbst mit einem Webserver beschäftigt bin.LittleEndian hat geschrieben:Sofern ihr wisst wo ich mehr Informationen darüber finde oder ihr ein wenig dazu erzählen möchtet, wäre ich euch sehr dankbar.
LittleEndian hat geschrieben:Ansonsten eine super Seite hier, muss ich sagen! Es ist schön, wenn man sich mit Gleichgesinnten austauschen kann.

Wenn Du erst kurz dabei bist, wie kam es zum Namen 'LittleEndian'?LittleEndian hat geschrieben:Ich bin zwar erst seit Kurzem dabei, aber C Programmierung macht einfach enorm Spass.
Willkommen auf proggen.org, Uservorstellungen im entsprechenden Brett und rege Beteiligung sind gerne gesehen.

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Webseiten auslesen die Zweite..
'301 Moved Permanently' heisst, dass die angeforderte Ressource ab sofort unter der im "Location"-Header-Feld angegebenen Adresse zu finden ist. Die alte Adresse ist nicht länger gültig. Der Browser folgt dieser Adresse im "Location"-Header. Dein Programm müsste nun diese Adresse auswerten und eine neue Verdindung dahin aufbauen.LittleEndian hat geschrieben: Häufig bekam ich allergings:
obwohl die Adresse sich über einen Browser einwandfrei direkt anwählen lässt.Code: Alles auswählen
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="http://board.anotherfail.de/tn20.htm">here</a>.</p> </body></html>
-
- Beiträge: 3
- Registriert: Di Okt 25, 2011 6:58 pm
Re: Webseiten auslesen die Zweite..
Ich hatte mehrere Varianten ausprobiert, wobei ich zugeben muss, daß die Version mit dem Leerzeichen auffällig lange brauchte, bis der Server mir schliesslich eine Fehlermeldung lieferte und nun weiss ich auch woran es gelegen hat. Nach einer Weile bin ich nämlich tatsächlich auf die Telnetvariante umgestiegen, um schneller durchprobieren zu können, allerdings ohne ein zweites Mal Return zu drücken. Sehr wertvoller Hinweis, danke.Xin hat geschrieben: Nach GET folgt der Pfad: "/", dann ein Leerzeichen und dann das Protokol mit Version "HTTP/1.0"
Du kannst mit dem Telnet-Client spielen. Nach der Eingabe von GET musst Du 2x Return drücken.
Ich hatte stets die Url desjenigen Servers verwendet, mit dem ich mich zuvor verbunden hatte und wie gesagt, einige Male hat es sogar geklappt (unter anderem zB auf diesem Server hier), aber ich schrieb ja bereits, dass mir das auch ziemlich komisch und unplausibel vorkam.Xin hat geschrieben:Das geht nicht:LittleEndian hat geschrieben: Ich habe mir daraufhin den RFC2616 in groben Zügen durchgelesen. Dort heisst es man kann die Anfrage direkt unter Angabe des vollständigen Pfades stellen, also zb "GET http://www.testurl.org/forum/viewtopic.php?f=21&t=4641".
Du kannst nicht den einen Server fragen, was er Dir per http-Protokoll von einem anderen Server holen soll.
So wie du es schreibst macht es deutlich mehr Sinn. Übrigens habe ich die Sache mit dem Virtual host ebenfalls probiert gehabt (allerdings ohne zu wissen, dass dies so heisst. Es stand beispielhaft im RFC.) Auch hier fehlte das zweite Return.
Die Byte Order wird in dem Guide, den ich eingangs erwähnte, erklärt. Ohne dieses Wissen hätte ich meine beiden Testprogramme (Server/Client) auch garnicht schreiben können. Ganz unabhängig davon fand ich das dahinterstehende Wortspiel einfach witzig und da ich mich tatsächlich wie ein kleiner Indianer fühle, der gerade begonnen hat die weite Welt zu erkunden, habe ich mir diesen Namen gegeben.Xin hat geschrieben: Wenn Du erst kurz dabei bist, wie kam es zum Namen 'LittleEndian'?
Vielen Dank! Ich fühe mich schon jetzt sehr wohl hier und trage gerne meinen Teil zu diesem wunderbaren Projekt bei.Xin hat geschrieben: Willkommen auf proggen.org, Uservorstellungen im entsprechenden Brett und rege Beteiligung sind gerne gesehen.
Super Hinweis, danke dir!C@mper hat geschrieben:
'301 Moved Permanently' heisst, dass die angeforderte Ressource ab sofort unter der im "Location"-Header-Feld angegebenen Adresse zu finden ist. Die alte Adresse ist nicht länger gültig. Der Browser folgt dieser Adresse im "Location"-Header. Dein Programm müsste nun diese Adresse auswerten und eine neue Verdindung dahin aufbauen.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Webseiten auslesen die Zweite..
Das zweite Return (also eine Zeile ohne Inhalt) schließt den HTTP-Header ab. Erst nachdem der komplette Header gesendet wurde, reagiert der HTTP-Server.LittleEndian hat geschrieben:Nach einer Weile bin ich nämlich tatsächlich auf die Telnetvariante umgestiegen, um schneller durchprobieren zu können, allerdings ohne ein zweites Mal Return zu drücken. Sehr wertvoller Hinweis, danke.
Außer natürlich, Du tippst zu langsam und der Server kappt dann irgendwann die Verbindung. => Fehlermeldung.
LittleEndian und BigEndian ist für einen Anfänger schon recht spezielles Wissen.LittleEndian hat geschrieben:Die Byte Order wird in dem Guide, den ich eingangs erwähnte, erklärt. Ohne dieses Wissen hätte ich meine beiden Testprogramme (Server/Client) auch garnicht schreiben können.Xin hat geschrieben: Wenn Du erst kurz dabei bist, wie kam es zum Namen 'LittleEndian'?
Ich habe gerade mal nachgeschaut, ein Endianess-Artikel steht sogar schon auf der Todo-Liste, dazu haben wir also auch noch gar nix.
Wo kommt denn der Indianer her? ^^LittleEndian hat geschrieben:Ganz unabhängig davon fand ich das dahinterstehende Wortspiel einfach witzig und da ich mich tatsächlich wie ein kleiner Indianer fühle, der gerade begonnen hat die weite Welt zu erkunden, habe ich mir diesen Namen gegeben.
Das ist eher ein Denglisches Wortspiel

"Endian" kommt vom Ende. Ein "Indian" ist ein Inder. Du fühlst Dich wie ein LittleNativeAmerican.

Aber auch kleine Inder entdecken die Welt.

Wenn Du irgendwann Dein Wissen im Wiki mit uns Teilen magst und darüber schreiben möchtest, schreib mich wegen des Accounts an.LittleEndian hat geschrieben:Vielen Dank! Ich fühe mich schon jetzt sehr wohl hier und trage gerne meinen Teil zu diesem wunderbaren Projekt bei.Xin hat geschrieben: Willkommen auf proggen.org, Uservorstellungen im entsprechenden Brett und rege Beteiligung sind gerne gesehen.
Jow... @Camper, den Part habe ich geschickt weggequotet und dann vergessen zu beantworten.LittleEndian hat geschrieben:Super Hinweis, danke dir!C@mper hat geschrieben: '301 Moved Permanently' heisst, dass die angeforderte Ressource ab sofort unter der im "Location"-Header-Feld angegebenen Adresse zu finden ist. Die alte Adresse ist nicht länger gültig. Der Browser folgt dieser Adresse im "Location"-Header. Dein Programm müsste nun diese Adresse auswerten und eine neue Verdindung dahin aufbauen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 3
- Registriert: Di Okt 25, 2011 6:58 pm
Re: Webseiten auslesen die Zweite..
Ich bin mir gerade nicht ganz sicher ob wir uns missverstehen.Xin hat geschrieben:LittleEndian und BigEndian ist für einen Anfänger schon recht spezielles Wissen.LittleEndian hat geschrieben: Die Byte Order wird in dem Guide, den ich eingangs erwähnte, erklärt. Ohne dieses Wissen hätte ich meine beiden Testprogramme (Server/Client) auch garnicht schreiben können.
Ich habe gerade mal nachgeschaut, ein Endianess-Artikel steht sogar schon auf der Todo-Liste, dazu haben wir also auch noch gar nix.
Das ist der Guide auf den ich mich die ganze Zeit beziehe und aus dem ich mein Wissen über Netzwerkprogrammierung habe (zu deren Grundvorraussetzungen eben auch Kenntnis und Umgang mit der Byte Order gehören). Vielleicht war dir das aber auch längst klar und dein Satz über den 'Endianess-Artikel' war eher als Anregung gemeint einen solchen zu verfassen.LittleEndian hat geschrieben:
Hallo zusammen,
ich habe mir eben 'Beej's Guide to Network Programming' duchgelesen [...]
Das stimmt so nur zum Teil. Das Oxford English Dictionary (schweres Geschütz, ich weiss), sagt hierzu Folgendes:Xin hat geschrieben: Wo kommt denn der Indianer her? ^^
Das ist eher ein Denglisches Wortspiel
"Endian" kommt vom Ende. Ein "Indian" ist ein Inder. Du fühlst Dich wie ein LittleNativeAmerican.
Aber auch kleine Inder entdecken die Welt.![]()
http://oxforddictionaries.com/definition/Indian
Insbesondere über den Gebrauch des Wortes stellt es fest:
Zum Glück brauchen wir uns in C mit solchen Vieldeutigkeiten nicht herumzuschlagen.Oxford English Dictionary hat geschrieben: Usage
The native peoples of America came to be described as Indian as a result of Christopher Columbus and other voyagers in the 15th -16th centuries believing that, when they reached the east coast of America, they had reached part of India by a new route. The terms Indian and Red Indian are today regarded as old-fashioned and inappropriate, recalling, as they do , the stereotypical portraits of the Wild West. American Indian, however , is well established, although the preference where possible is to make reference to specific peoples, such as Apache, Delaware, and so on. See also American Indian (usage) and Native American

Zurück zur Byte Order. Je nach Order wird ein numerischer Wert im Speicher beginnend mit dem LittleEnd oder eben dem BigEnd abgelegt. (Edit: Natürlich werden sämtliche Daten auf diese Weise abgelegt, die Namensgebung wird bei der Speicherung numerischer Werte aber besonders deutlich (man, jetzt könnte ich eine echt verschachtelte Erklärung anfangen..(verdammt, was passiert hier gerade))). Damit wäre die Namensgebung bereits eindeutig und völlig ausreichend. Das eigentliche Wortspiel entsteht nun durch das Anhängen des 'ian' (das ist ja schon wieder ein Wortspiel in sich, fällt mir gerade auf). Naja, jedenfalls wird ein 'LittleEndian' damit zu einer Person mit gleich 3 verschiedenen Bedeutungen. Alle in einer Person vereinigt könnte man sagen, ein LittleEndian ist ein kleiner Indianer, der sein weich gekochtes Frühstücksei von der Spitze her pellt und vorzugsweise auf Intel 80x86 Architekturen beheimatet ist.

Das du mich nicht für einen Anfänger hälst (ich hätte so gerne 'hellst' geschrieben, aber ich schätze dafür kennen wir uns noch nicht lange genug ^^) schmeichelt mir zwar, aber es impliziert auch, dass ich hier irgendwen täuschen oder mich kleiner machen wollte als ich bin und das ist wirklich nicht der Fall. Sobald ich etwas Zeit finde, werde ich mich mal kurz an entsprechender Stelle vorstellen, vielleicht hilft das.
Das werde ich auf jeden Fall tun, sobald ich das Gefühl habe etwas Konstruktives beitragen zu können.Xin hat geschrieben: Wenn Du irgendwann Dein Wissen im Wiki mit uns Teilen magst und darüber schreiben möchtest, schreib mich wegen des Accounts an.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Webseiten auslesen die Zweite..
Das ist mir klar, ich konnte mich halt nur nicht zurückhalten darauf hinzuweisen, dass Endians keine Indianer sind.LittleEndian hat geschrieben: Ich bin mir gerade nicht ganz sicher ob wir uns missverstehen.
> 'Beej's Guide to Network Programming' duchgelesen [...]
Das ist der Guide auf den ich mich die ganze Zeit beziehe und aus dem ich mein Wissen über Netzwerkprogrammierung habe (zu deren Grundvorraussetzungen eben auch Kenntnis und Umgang mit der Byte Order gehören). Vielleicht war dir das aber auch längst klar und dein Satz über den 'Endianess-Artikel' war eher als Anregung gemeint einen solchen zu verfassen.
Es sollte auch keine Aufforderung sein, einen solchen Artikel zu schreiben - was Dich auf keine Fall davon abhalten sollte - ich habe lediglich gemeint, dass das Wissen für einen Einsteiger recht speziell ist. Deswegen wollte ich einen solchen Artikel auf die Todo-Liste setzen, wo ich allerdings bereits einen Eintrag für einen solchen Artikel fand.
Vom Oxford English Dictionary erschlagen... ^^LittleEndian hat geschrieben:Das stimmt so nur zum Teil. Das Oxford English Dictionary (schweres Geschütz, ich weiss), sagt hierzu Folgendes:Xin hat geschrieben: Wo kommt denn der Indianer her? ^^
Das ist eher ein Denglisches Wortspiel
"Endian" kommt vom Ende. Ein "Indian" ist ein Inder. Du fühlst Dich wie ein LittleNativeAmerican.
Aber auch kleine Inder entdecken die Welt.![]()
http://oxforddictionaries.com/definition/Indian
Insbesondere über den Gebrauch des Wortes stellt es fest:
Oxford English Dictionary hat geschrieben: Usage
The native peoples of America came to be described as Indian as a result of Christopher Columbus and other voyagers in the 15th -16th centuries believing that, when they reached the east coast of America, they had reached part of India by a new route. The terms Indian and Red Indian are today regarded as old-fashioned and inappropriate, recalling, as they do , the stereotypical portraits of the Wild West. American Indian, however , is well established, although the preference where possible is to make reference to specific peoples, such as Apache, Delaware, and so on. See also American Indian (usage) and Native American
Nun gut, kleiner, amerikanischer Inder. Erinnere mich daran, Dich Rajesh zu nennen. ;-D
Ich hab kein Wort verstanden. ^^LittleEndian hat geschrieben:Zurück zur Byte Order. Je nach Order wird ein numerischer Wert im Speicher beginnend mit dem LittleEnd oder eben dem BigEnd abgelegt. (Edit: Natürlich werden sämtliche Daten auf diese Weise abgelegt, die Namensgebung wird bei der Speicherung numerischer Werte aber besonders deutlich (man, jetzt könnte ich eine echt verschachtelte Erklärung anfangen..(verdammt, was passiert hier gerade))). Damit wäre die Namensgebung bereits eindeutig und völlig ausreichend. Das eigentliche Wortspiel entsteht nun durch das Anhängen des 'ian' (das ist ja schon wieder ein Wortspiel in sich, fällt mir gerade auf). Naja, jedenfalls wird ein 'LittleEndian' damit zu einer Person mit gleich 3 verschiedenen Bedeutungen. Alle in einer Person vereinigt könnte man sagen, ein LittleEndian ist ein kleiner Indianer, der sein weich gekochtes Frühstücksei von der Spitze her pellt und vorzugsweise auf Intel 80x86 Architekturen beheimatet ist.
<ächz>...LittleEndian hat geschrieben:Das du mich nicht für einen Anfänger hälst (ich hätte so gerne 'hellst' geschrieben, aber ich schätze dafür kennen wir uns noch nicht lange genug ^^)
Es gibt da ja noch eine dritte Schreibweise, eher selten verwendet, fast schon "Alternativ". Was hältst Du so von dieser?
Auf jeden Fall. ^^LittleEndian hat geschrieben:schmeichelt mir zwar, aber es impliziert auch, dass ich hier irgendwen täuschen oder mich kleiner machen wollte als ich bin und das ist wirklich nicht der Fall. Sobald ich etwas Zeit finde, werde ich mich mal kurz an entsprechender Stelle vorstellen, vielleicht hilft das.
Kann natürlich auch vorkommen, dass ich Informationen von Leuten, die gerade erst hier eingeschlagen sind, mal durcheinander werfe.
*thumbs up*LittleEndian hat geschrieben:Das werde ich auf jeden Fall tun, sobald ich das Gefühl habe etwas Konstruktives beitragen zu können.Xin hat geschrieben: Wenn Du irgendwann Dein Wissen im Wiki mit uns Teilen magst und darüber schreiben möchtest, schreib mich wegen des Accounts an.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.