Bonjour,
Je cherche un tutoriel ou une fonction qui me permette de lire un fichier (ou de le télécharger) présent sur un serveur web avec le protocole http.
Pouvez-vous m'en indiquer ?
Merci![]()
Bonjour,
Je cherche un tutoriel ou une fonction qui me permette de lire un fichier (ou de le télécharger) présent sur un serveur web avec le protocole http.
Pouvez-vous m'en indiquer ?
Merci![]()
Il faut plus que le C++ standard pour faire ça.
Par exemple Qt a des fonctions pour réaliser cette opération.
Voir ici pour l'utiliser avec Visual Studio : http://arb.developpez.com/qt4/vc++/compilation/
J'ai un code source tiré du Petzold en win32 si interessé pour Windows.Envoyé par the_penguin
M'envoyer un MP.
Sous Windows il faut programmer WinInet il ya des fonctions pour cela...
Pas nécessaire d'avoir tout un framework pour cela; il suffit de prendre les fonctions de WinInet programmer un thread...Envoyé par Miles
en plus Qt c'est payant
Y a-t-il de la documentation en français sur wininet ?
Sinon, en faisant des recherches sur wininet, j'ai entendu parler de MFC, qu'en pensez-vous ?
Oui, ce n'est pas nécessaire, je n'ai pas dit le contraire.Envoyé par mat.M
En revanche, Qt4 est dispo sous Windows, Linux et OSX sous licence GPL, donc gratuit.
il suffit d'envoyer les bonnes commandes au serveur :
GET /<chemin> HTTP/1.0 (pour eviter les caracteres chiants) quelques retours chariots a la fin et roulez !
(ah un ptit host : domaine aussi )
petite précision : j'utilise les sockets natifs là, et le code est prévu pour une plateforme *nix donc pour windows faut adapter avec les wasa start machin (cf faq, gardez votre cochonerie d'os :-")
exemple pour une page index :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 std::string resolv(const std::string url) { hostent *nom; nom = gethostbyname(url.c_str()); std::cout << inet_ntoa(*(in_addr*)nom->h_addr_list[0]); return inet_ntoa(*(in_addr*)nom->h_addr_list[0]); } std::string getPage(std::string url) { std::cout << url << std::endl; int sockfd = socket(PF_INET, SOCK_STREAM, 0); std::string ip(""), msg(""), buffer(""); char tmp[1024] = { 0 }; sockaddr_in server; ip = resolv(url); server.sin_family = AF_INET; server.sin_port = htons(80); server.sin_addr.s_addr = inet_addr(ip.c_str()); memset(&(server.sin_zero), '\0', 8); // zero the rest of the struct int connec = 0; if((connec = connect(sockfd, (sockaddr*)&server, sizeof(sockaddr))) == -1) std::cerr << "Erreur avec connect()" << std::endl; msg = "GET / HTTP/1.0\nhost: " + url + "\n\n"; if((send(sockfd, (void *)(msg.c_str()), msg.size(),0)) == -1) std::cerr << "Erreur lors de l'envoi de la commande" << std::endl; int rcv = 0; while((rcv = recv(sockfd, tmp, sizeof(tmp),0)) >0) buffer += std::string(tmp,rcv); // std::cout << buffer << std::endl; close(sockfd); return buffer; }
Prendre l'exemple de Fser mais créer un threadEnvoyé par the_penguin
Partager