# Datei Download vom Web



## giwoody (17. Mai 2005)

Hallo Leute

Bin am erstellen eines Programms unter C, mit dem ich aus dem Web eine Textdatei herunterladen soll. Problem dabei ist, dass ich mit Sockets noch nichts gemacht habe. Kann mir jemand ein Codebeispiel geben für den Dateidownload? Es würde auch ein Link reichen...

Schon mal Danke im voraus


----------



## Tobias K. (17. Mai 2005)

moin


Benutz doch die Suchfunktion!
Außerdem wäre eine Angabe gut, ob es per HTTP oder FTP geschehen soll.


mfg
umbrasaxum


----------



## giwoody (17. Mai 2005)

Download per HTTP 

die Suchfunktion habe ich benutzt, jedoch nur Ausschnitte aus Quelltexten gefunden, die an beliebiger Stelle entnommen wurden...

Was mache ich, wenn ich einen Socket zum Server aufgebaut habe und dieser mir Antwortet? Was wäre der nächste Schritt für den Download der Datei XYZ.txt vom Webspace?


----------



## cesupa (17. Mai 2005)

Mh, also du müsstest dich mit server in Verbindung setzen und dann eine Anfrage senden, ein sogennantes Request (Weis aber selber nicht wie das bei einem Dateidownload heißen soll, wäre froh wenn mir das bitte jemand verraten würde.). Naja, wenn du die Anfrage gesendet hast müsste der Server beginnen, dir die Daten der Datei zu senden, heißt also du musst mit recv() oder read() [letzteres unter Linux] die Daten empfangen können und in eine Datei speichern. So müste es rein theoretisch funktionieren. ;-) 

Gruß
cesupa


----------



## Test (17. Mai 2005)

Du könntest auch einfach "URLDownloadToFile" verwenden.


----------



## uhu01 (17. Mai 2005)

Hy!

Wie der Request aussehen muss kann man hier Lesen. Ist auf Seite 35.

Sieht z.B. so aus
	
	
	



```
GET http://mitglied.lycos.de/me/index.html HTTP/1.1
```
Die Zeile kommt einfach in ein TCP Packet hinein, der Server sollte darauf reagieren, indem er die Daten zurückschickt. Sonst einfach mal den Abschnitt Request durchlesen, wenn man was komplizierteres machen möchte muss man das sowieso.

mfg
uhu01


----------



## cesupa (17. Mai 2005)

Ich hab mir jetzt mal so auf die schnelle ein C++ Prog geschrieben in dem eine Textdatei von meiner site (siehe Signatur  ) heruntergeldanen wird. Dabei habe ich dieses Request verwendet: "GET http://cesupa23.cybton.com/besucher_1.txt HTTP/1.1\n\n"
Das ganze hab ich an die IP von http://cesupa23.cybton.com/ geschickt und als antwort ein Bad Request erhalten. Was hab ichn falsch gemacht ?

Danke schon mal

cesupa


----------



## uhu01 (18. Mai 2005)

Hy!

Ich jetzt zwar nicht mehr nachschaun oder ausprobieren, aber warum hast du am Ende die \n\n?
Werd morgen gleich mal probieren bzw. nachschaun.

mfg
uhu01


----------



## Tobias K. (18. Mai 2005)

moin




> Dabei habe ich dieses Request verwendet: "GET http://cesupa23.cybton.com/besucher_1.txt HTTP/1.1\n\n"


Das \n\n solltest du wirklich nicht mit schicken.


mfg
umbrasaxum


----------



## thooomy (18. Mai 2005)

Links:

Einstieg in die Socketprogrammierung : 
http://www.zotteljedi.de/doc/socket-tipps/index.html

Aufbau eines HTTP Headers (wie mache ich einen request):
http://www.jmarshall.com/easy/http/#


----------



## cesupa (18. Mai 2005)

Ok, ich hab jetz mal die \n\n weggelassen und dann sendet er zwar das Request, jedoch erhalte ich vom Server keine Antwort. 
Weis auch nicht warum.

cesupa


----------



## thooomy (19. Mai 2005)

bei einem HTTP header wird jede zeile mit /r/n abgeschlossen
wie gesagt solltest du dich mal mit dem aufbau eines HTTP headers auseinandersetzen (siehe links) - meists liegts daran.

willst du z.B dowloads erzwingen sollte ein "Content-Dispostion:" in dein Header. 

Ein repsonse vom server muss IMMER kommen - wenn auch nur eine Fehlermeldung "Bad request" oder so, sonst stimmt was mit der TCP verbindung nicht (schon mal mit ethereal gesnifft ? ).


----------



## cesupa (21. Mai 2005)

Hi,

das mit dem Request hab ich nun geschafft, text Dateien kann ich jetzt Problemlos herunterladen. Hab jetzt mal verscuht eine exe Datei aus dem Web zu laden, nur leider kam dann beim ausführen der exe-Datei ein Fehler: 

Die NTVDM-CPU hat einen ungültigen Befehl entdeckt.


Muss ich bei binär dateien irgend was beachten ?

Danke schon mal für eure Antworten.

cesupa

P.S.: Mir fällt grad noch auf, das die exe Datei extrem kleiner ist als die Original datei. Mein Prog lädt über 500 KB runter, aber das Prog ist nur 3,83 KB groß. wie kann das sein ?


----------

