DOS-Browser
-
Hallo,
ich möchte mir eine Art nongraphical Browser programmieren. Soll heißen, auf einer Kommandozeilenbasis soll sich der "Browser" per Winsockets (oder falls es eine andere Möglichkeit gibt, dann nennt mir die bitte) mit einem Webserver an Port 80 (HTML-Port) verbinden und von ihm eine bestimmte HTML-Seite anfordern. Diese soll analysiert (nicht interpretiert!) und abgespeichert werden. Meine Fragen:
- Wie verbinde ich mich mit dem Webserver? Per Winsockets oder anders?
- Wie fordere ich vom Webserver eine Datei an? z.B. die Datei index.html von www.google.de
- Wie erkläre ich dem Webserver, dass ich z.B. eine Datei aus einem Unterordner will? z.B. http://www.c-plusplus.net/forum/posting-var-mode-is-newtopic-and-f-is-13.htmlDanke,
Cheebi
-
Klar, dazu kannst du wie gewohnt Sockets verwenden.
Das HTTP-Protokoll ist relativ simpel, die Minimalanfrage würde so aussehen:
"GET /index.html HTTP/1.0\r\n\r\n"
Bei Unterordnern dann entsprechend "GET /unterordern/unterorder2/...etc".
Wobei das nichts ist, was man nicht auch innerhalb von zwei Minuten bei Google und Wikipedia hätte erfahren können
-
Cheebi schrieb:
Soll heißen, auf einer Kommandozeilenbasis soll sich der "Browser" per Winsockets[...]
DOS kennt aber idR. keine Winsockets => Unterschied: DOS/MS-DOS und Win32-Konsole.
Ansonsten schau dir halt mal an, wie das HTTP-Protokoll funktioniert - w3c.org waere da zB. so eine Anlaufstelle neben Wikipedia.
-
-
oh.. danke. das scheint ja wirklich kein Hexenwerk zu sein. Nur funktionieren tut's trotzdem nicht.
Ich denke es liegt daran, wie ich eine HTTP-Anfrage übermittle:rc = send(ClientSocket, buf, strlen(buf), 0); if ( rc == SOCKET_ERROR) { printf("Fehler beim Senden von Daten: %d", WSAGetLastError()); return EXIT_FAILURE; } printf("[warten auf Antwort]\n"); rc = recv(ClientSocket, buf, 4000, 0);
In buf steht folgendes drin:
GET /test.html HTTP/1.0\r\n\r\n
Danach warte ich auf eine Antwort, es kommt aber nichts zurück.
printf("[warten auf Antwort]\n"); rc = recv(ClientSocket, buf, 4000, 0); if (rc == SOCKET_ERROR) { printf("Fehler beim Empfangen von Daten: %d", WSAGetLastError()); return EXIT_FAILURE; } if (rc == 0) { printf("[Server Kontakt abgebrochen]"); return EXIT_FAILURE; }
Woran kann es jetzt liegen, dass ich keine Antwort erhalte?
Cheebi
Edit:
PS: Ich meinte natürlich Win32-Konsolen-Anwendung und nicht DOS. Tut mir leid, bin nur gewohnt TP zu programmieren. Da is halt Konsole = 16Bit / DOS.
-
Problem gelöst:
Folgende Anfrage ergab eine 200er Rückmeldung:GET /index.html HTTP/1.1\nHost: host.de\n\n
Danke für die Hilfestellung
Cheebi
-
Cheebi schrieb:
Edit:
PS: Ich meinte natürlich Win32-Konsolen-Anwendung und nicht DOS. Tut mir leid, bin nur gewohnt TP zu programmieren. Da is halt Konsole = 16Bit / DOS.
-
-------