HTTP / FTP Download
-
Ist Wininet nicht nur für C++ gedacht ?
BOOL InternetCheckConnection( LPCTSTR lpszUrl, DWORD dwFlags, DWORD dwReserved );
BOOL gibts doch in C garnicht. Oder irre ich mich ?
-
Hab mal folgendes probiert:
#include <stdio.h> #include <Wininet.h> int main() { BOOL IsOnline = FALSE; char web_addresse[] = "http://www.web.de"; IsOnline = InternetCheckConnection( web_addresse, 0, 0 ); if ( IsOnline == TRUE ) { printf("Internetverbindung besteht !!\n"); } else { printf("Es besteht keine Internetverbindung !! %d\n",GetLastError()); } }
OS : cygwin
Compiler : gccgcc -o check check.c -lwininet
Lässt sich ohne Probs übersetzen ? Gibts also doch BOOL in C ?
Allerdings gibt sagt das fertige Prog dass kein Inetverbindung besteht, bin aber Online.
-
ja bool gibts in C99
_Bool //oder mit <stdbool.h> //auch: bool
ist es so schwer die neuen features von einem 7 jahre alten standard zu kennen?
ich meine bool oder vl-arrays sind ja eigentlich ganz nützlich
-
ok, kannst du mir dann sagen warum das meint es gäbe kein Inet ?
#include <stdio.h> #include <Wininet.h> #include <stdbool.h> int main() { bool IsOnline = FALSE; char web_addresse[] = "http://www.web.de"; IsOnline = InternetCheckConnection( web_addresse, 0, 0 ); if ( IsOnline == TRUE ) { printf("Internetverbindung besteht !!\n"); } else { printf("Es besteht keine Internetverbindung !! %d\n",GetLastError()); } }
-
hab grad kein windows, wird also schwierig
aber ich kann dir sagen, dass die makros klein geschrieben werden:
true // !0 TRUE false // 0 FALSE
-
ich habe folgenden Quelltext:
#include<stdio.h> #include<Wininet.h> void main() { IsOnline = 0; char web_addresse[] = http://www.web.de": IsOnline = InternetCheckConnection( web_addresse, 0, 0); if ( IsOnline != 0) { printf("Internetverbindung besteht !!\n"); } else { printf("Es besteht keine Internetverbindung !! %d\n", GetLastError()); } }
also im Grund so wie hier geschrieben... ich erhalte jedoch folgende Fehlermeldung:
[quot]
d:\microsoft visual studio\vc98\include\wininet.h(2) : warning C4182: Die #include-Verschachtelungsebene ist 363 tief; Endlosschleife moeglich
d:\microsoft visual studio\vc98\include\wininet.h(2) : fatal error C1076: Compiler-Beschraenkung: Interne Heap-Grenze erreicht; Verwenden Sie /Zm, um eine hoehere Grenze anzugeben
Fehler beim Ausführen von cl.exe.
[/quot]
Beide Fehler zeit VC++ 6 auf das #include<Wininet.h> anBitte dringend um Hilfe
-
Hm, includier mal <wininet.h> als erstes... Oder vorher noch windows.h oder so?
-
Rubber schrieb:
wie lädt man eine Datei mittels C aus dem Internet ?
Also ein http/ftp Download.Tipp: Benutze lieber libcurl, als diese Amateurhafte Funktion. libcurl kann übrigens auch ftp (und mehr)
@donnel
BOOL ist glaube ich ein Macro der WinAPI, was man schon an der hässlichen Alles-Groß-Schreibweise erkennt. Normalerweise sind Typen und typedefs in C klein geschrieben.
-
rüdiger schrieb:
Benutze lieber libcurl, als diese Amateurhafte Funktion.
...
BOOL ist glaube ich ein Macro der WinAPI, was man schon an der hässlichen Alles-Groß-Schreibweise erkennt.hey, du bist ja ein echter m$-hasser
:xmas2:
-
ten schrieb:
rüdiger schrieb:
Benutze lieber libcurl, als diese Amateurhafte Funktion.
...
BOOL ist glaube ich ein Macro der WinAPI, was man schon an der hässlichen Alles-Groß-Schreibweise erkennt.hey, du bist ja ein echter m$-hasser
:xmas2:Ich kann dir irgend wie nicht folgen. Das ist doch nur ein normaler Sinn für Ästhetik, das man All-Upper-Case nicht hübsch findet. Egal wer den Code schreibt...
-
rüdiger schrieb:
Ich kann dir irgend wie nicht folgen. Das ist doch nur ein normaler Sinn für Ästhetik, das man All-Upper-Case nicht hübsch findet. Egal wer den Code schreibt...
naja, ich finde es steigert etwas die lesbarkeit, wenn man typedefs und #defines gross schreibt. oft sieht man auch solche 't' anhängsel wie z.b.
typedef void* handle_t;
da finde ich ein 'typedef void* HANDLE;' etwas besser gelungen.
:xmas2:
-
Also ich würd das ja so machen:
void DownloadSpy() #include <wininet.h> { HINTERNET hInternet; HINTERNET hFtpSession; hInternet = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); hFtpSession = InternetConnect ( hInternet, "FTP-Server", INTERNET_DEFAULT_FTP_PORT, "FTP-Username", "FTP-Passwort", INTERNET_SERVICE_FTP, 0, 0 ); FtpGetFile ( hFtpSession, "downloads//datei.exe", "C:\\datei.exe", TRUE, 0 , FTP_TRANSFER_TYPE_BINARY, 0 ); InternetCloseHandle(hFtpSession); InternetCloseHandle(hInternet); }
Ihr müsst nur noch wininet Linken.
Das macht ihr wenn ihr Dev-Cpp benutzt so:
Projekt->Projekt Optionen->Parameter
und da ins dritte Fenster -lwininet reinschreibenMfG
cobra11freak
-
hi leute
ich versuch auch gerade eine datei aus dem Internet zu ziehen und bin dabei über die Hilfe auf diesen Thread gestoßen.
Das Problem bei mir: Das Ziel ist in dem Sinne keine Datei sondern nur ein Befehl der den Download einer Datei hervorruft.
[url]http://de.old.finance.yahoo.com/d/quotes.csv?s=@^GDAXI&f=sl1d1t1c1ohgv&e=.csv
[/url]
Ich hoffe allerdings, dass Feiglings Code trotzdem funzt. Soweit bin ich aber noch nicht. Vermutlich fehlen mir noch ein paar eingebundene Header bevor ich soweit bin. Hat da jemand einen Tipp welche Headerfiles notwendig sind?Was mir übrigens als erstes am Code aufgefallen ist, ist folgendes.
unsigned long file_size = -1;
Mein Compiler versieht das erstmal mit einer Warnung.
undeclared sind: "log_main" "LOG_ERROR" "bcopy" "close" "split_string"
Anmerkung: Ich verwende DevCpp.
gruß und danke im vorraus
Tobi