Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 3


|
Menu Snippets (navigation): |
Détails du snippet : [wxHTTP] : récupérer une page web |
Informations sur l'auteur de ce snippet : | |

Hors ligne
| Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
|
Introduction / Description : | |
L'utilisation de la classe wxHTTP est très peu documentée. Elle est pourtant simple à utiliser, un fois que l'on sait comment faire.
Le principal problème vient du fait que les données lues par cette classe ne sont disponibles que par l'intermédiaire d'un wxInputStream.
Or, un wxInputStream ne peut pas fournir de chaîne de caractère Unicode. Il faut donc penser à évnetuellement faire la traduction.
Voici la méthode pour récupérer une page web (et donc du texte, car pour un fichier normal, c'est à dire binaire, il n'est pas utile de faire la conversion)
Code wxWidgets:// Le header pour la classe wxHTTP #include <wx/protocol/http.h> wxHTTP http; // Les headers qui vont être envoyés lors de la requête http // Après quelques essais, il apparaît que ces deux lignes ne // sont pas obligatoires http.SetHeader(_T("Accept"),_T("*/*")); http.SetHeader(_T("User-Agent"),wxGetApp().GetAppName()); // On mets le Timeout à 2 minutes (car par défaut, wxWidgets le met à 10 minutes) http.SetTimeout(120); // Le buffer qui va recevoir les données char szBuff[1025]; // Pour une page web, on va pouvoir la stocker dans un wxString wxString data=_T(""); // On essaye de connecter le wxHTTP : on ne peut se connecter qu'à un serveur // et non à une adresse complète du style http://www.wxwidgets.org/downloads if (http.Connect(_T("www.wxwidgets.org"),80)) { if (wxInputStream *stream=http.GetInputStream(_T("/downloads") ) ) { // On lit une partie des données disponibles stream->Read(szBuff,1024); while (stream->LastRead()) { // On s'assure que le texte téléchargé se termine bien // par un caratère zéro szBuff[stream->LastRead()]='\0'; // On fait la conversion si nécessaire data+= wxString::FromAscii(szBuff); // Et on essaie de lire la partie suivante stream->Read(szBuff,1024); } delete stream; } } // Vous pouvez maintenant faire ce que vous voulez anec le wxString "data"
Et voilà , c'est aussi simple que cela. L'avantage de cette méthode, c'est qu'elle se fiche de savoir si on est en Unicode ou non. La fonction statique "wxString::FromAscii(...) se charge de tout.
@+ Xav'
xxltux (Membre)
Lieu: Montpellier
Inscrit le : 07-10-2007
Messages: 544
Snippets: 0
Tutoriels: 0
Site web
Hors ligne |
Et pour un post?
|
Itérer est humain, récurser est divin
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Il me semble que ça se passe dans les headers, mais je n'en suis pas sûr. Il faut que je décortique wxHttpEngine, pour voir. Mais je manque cruellement de temps pour ça...
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
xxltux (Membre)
Lieu: Montpellier
Inscrit le : 07-10-2007
Messages: 544
Snippets: 0
Tutoriels: 0
Site web
Hors ligne |
Faut aussi changer la methode
|
Itérer est humain, récurser est divin
|
patrick (Nouveau membre)
Inscrit le : 20-01-2009
Messages: 2
Snippets: 2
Tutoriels: 0
Hors ligne |
salut, Le plus simple pour le download: if (http.Connect(cfg_server,80)) { if (wxInputStream *httpStream=http.GetInputStream("/downloads") ) { wxStringOutputStream out_stream(&data); httpStream->Read(out_stream); delete httpStream; } }
|
|
Menu Snippets (navigation): |
|