
| | auteur : François Jaffré |
Qt a encapsulé le protocole HTTP au sein de la classe QHttp.
Celle-ci possède notamment les méthodes suivantes :
- int post(const QString & path, QIODevice * data, QIODevice * to = 0) -> Permet l'envoie de données
- int get(const QString & path, QIODevice * to = 0) -> Permet de réceptionner des données
- int close() -> Ferme la connexion
| Téléchargement d'une page web | 
#include <QApplication>
#include <QPushButton>
#include <QGridLayout>
#include <QProgressBar>
#include <QLabel>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QHBoxLayout>
#include <QHttp>
#include <QFile>
#include <QUrl>
#include <QMessageBox>
#include <QFileDialog>
class FAQHttp : public QWidget
{
Q_OBJECT
QPushButton *m_Bouton_Dowload;
QProgressBar *m_ProgressBar;
QLineEdit *m_Edit;
QLabel *m_Label;
QHttp *m_http;
QFile *m_file;
int m_httpId;
public :
FAQHttp()
{
this->m_Bouton_Dowload = new QPushButton("Télécharger",this);
this->m_ProgressBar = new QProgressBar(this);
this->m_Edit = new QLineEdit(this);
this->m_Label = new QLabel("URL:", this);
m_Label->setBuddy(m_Edit);
QHBoxLayout *firstLayout = new QHBoxLayout;
firstLayout->addWidget(m_Label);
firstLayout->addWidget(m_Edit);
QHBoxLayout *Layout = new QHBoxLayout;
Layout->addLayout(firstLayout);
Layout->addWidget(m_Bouton_Dowload);
QVBoxLayout *secondeLayout = new QVBoxLayout();
secondeLayout->addLayout(Layout);
secondeLayout->addWidget(m_ProgressBar);
setLayout(secondeLayout);
connect(this->m_Bouton_Dowload, SIGNAL(clicked(bool)), this, SLOT(click_Download(bool)));
resize(400, 150);
}
private slots:
void DownloadFile(QString source , QString fichier)
{
QUrl adresse(source);
this->m_http = new QHttp(adresse.host(),80,this);
m_file = new QFile(fichier);
if(!m_file->open(QIODevice::WriteOnly))
{
QMessageBox::information(this, "HTTP Problemes"," Probleme lors du telechargement");
delete this->m_http;
delete this->m_file;
return;
}
m_httpId = m_http->get(adresse.toString(), m_file);
connect(m_http,SIGNAL(requestFinished(int, bool)),this,SLOT(finish_dowload(int ,bool)));
connect(m_http,SIGNAL(dataSendProgress(int,int)),this,SLOT(progress_dowload(int, int)));
this->m_ProgressBar->reset();
this->m_ProgressBar->setMinimum(0);
}
void finish_dowload(int httpId, bool error)
{
if (this->m_httpId != httpId)
{
return;
}
else
{
if(error)
QMessageBox::information(this, "HTTP Problemes"," Probleme lors du telechargement");
else
QMessageBox::information(this, "HTTP"," Le telechargement a réussi");
this->m_file->close();
delete this->m_http;
delete this->m_file;
}
}
void click_Download(bool valid)
{
QString saveFile = QFileDialog::getSaveFileName(this,"Download Files","C:\\", "All Files (*.*)");
if(!saveFile.isEmpty())
DownloadFile(this->m_Edit->text(),saveFile);
}
void progress_dowload(int done , int total)
{
this->m_ProgressBar->setMaximum(total);
this->m_ProgressBar->setValue(done);
}
};
#include "main.moc"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
FAQHttp w;
w.show();
return a.exec();
}
|
Remarque : Cette classe possède de nombreux signaux qui permettrent de suivre l'état de la connexion avec le serveur. Référez-vous à la doc pour plus d'information.
Remarque: Depuis Qt 4.4, QHttp est déprécié au profit des classes QNetworkAccessManager et QNetworkReply qui offrent plus de souplesse que QHttp.
|
lien : QHttp
|
| | auteur : François Jaffré |
Qt fournit dans son module réseau la classe QHostInfo qui permet de retrouver l'adresse ip correspondant à un nom de domaine mais aussi, si possible, de retrouver le domaine correspondant à l'ip.
Dans ce but QHostInfo possède les méthodes static suivantes :
- int QHostInfo::lookupHost (const QString & name, QObject * receiver, const char * member) -> Permet retrouver le nom de domaine à partir d'une IP ou vice versa de manière asynchrone (non bloquante).
- QHostInfo QHostInfo::fromName (const QString & name) -> Permet de retrouver l'ip appartenant au domaine et vice versa de manière synchrone (bloquante).
| Exemple | 
#include <QApplication>
#include <Qlabel>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
class ResolveDNS : public QWidget
{
Q_OBJECT
QLabel* m_Label_Domain;
QLabel* m_Label_Ip;
QLineEdit* m_Line_Domain;
QLineEdit* m_Line_Ip;
QPushButton* m_Button_Ip;
QPushButton* m_Button_Domain;
public :
ResolveDNS()
{
m_Label_Domain = new QLabel("&Domain :", this);
m_Label_Ip = new QLabel("&Ip :", this);
m_Line_Domain = new QLineEdit(this);
m_Line_Ip = new QLineEdit(this);
m_Label_Domain->setBuddy(m_Line_Domain);
m_Label_Ip->setBuddy(m_Line_Ip);
m_Button_Ip = new QPushButton("Resolve IP",this);
m_Button_Domain = new QPushButton("Resolve Domaine",this);
QHBoxLayout* Layout = new QHBoxLayout();
Layout->addWidget(m_Label_Domain);
Layout->addWidget(m_Line_Domain);
Layout->addWidget(m_Label_Ip);
Layout->addWidget(m_Line_Ip);
Layout->addWidget(m_Button_Domain);
Layout->addWidget(m_Button_Ip);
setLayout(Layout);
connect(this->m_Button_Ip, SIGNAL(clicked(bool)), this, SLOT(resolveIp(bool)));
connect(this->m_Button_Domain, SIGNAL(clicked(bool)), this, SLOT(resolveDomain(bool)));
}
private slots :
void resolveDomain(bool valid)
{
QHostInfo infoAdresse = QHostInfo::fromName(m_Line_Domain->text());
QList<QHostAddress> result_adresses = infoAdresse.addresses();
QString Ip;
for(int i=0; i < result_adresses.size(); i++)
{
Ip = Ip + result_adresses.at(i).toString() +"; ";
}
m_Line_Ip->setText(Ip);
}
void resolveIp(bool valid)
{
QHostInfo::lookupHost(m_Line_Ip->text(),this, SLOT(resolveIpFinish(QHostInfo)));
}
void resolveIpFinish(const QHostInfo& infoAdresse)
{
m_Line_Domain->setText(infoAdresse.hostName());
}
};
#include "main.moc"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ResolveDNS w;
w.show();
return a.exec();
}
|
|
lien : QHostInfo
|
Consultez les autres F.A.Q's
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2006
Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérêts.
Cette page est déposée à la SACD.
|