wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 1

Valid XHTML 1.0 Transitional

Valid CSS2

Menu Snippets (navigation):
Pages: 1    Accueil » Snippets » Internet - Réseaux
» [wxHTTP] : récupérer une page web
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: 1374
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)
Contenu du snippet :

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"
 
Explications finales :
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'
Commentaires
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: 1374
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à...
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):
Pages: 1    Accueil » Snippets » Internet - Réseaux
» [wxHTTP] : récupérer une page web