18 file.setFileName(localFileName);
19 if (!file.open(QIODevice::WriteOnly)) {
20 cerr << "Error: Cannot open "
21 << qPrintable(file.fileName) << " for writing: "
22 << qPrintable(file.errorString) << endl;
23 return false;
24 }
25 http.setHost(url.host, url.port(80));
26 http.get(url.path, &file);
27 http.close;
28 return true;
29 }
Функция
Запросы HTTP ставятся в очередь и обрабатываются асинхронно в цикле обработки событий Qt. На завершение выполнения запросов указывает сигнал
01 void HttpGet::httpDone(bool еггог)
02 {
03 if (еггог) {
04 сегг << "Еггог: " << qPrintable(http.errorString) << endl;
05 } else {
06 сегг << "File downloaded as " << qPrintable(file.fileName) << endl;
07 }
08 file.close;
09 emit done;
10 }
После выполнения запросов HTTP мы файл закрываем, уведомляя пользователя о возникновении ошибки.
Функция
01 int main(int argc, char *argv[])
02 {
03 QCoreApplication app(argc, argv);
04 QStringList args = app.arguments;
05 if (args.count != 2) {
06 cerr << "Usage: httpget url" << endl << "Example:" << endl
07 << " httpget<< endl;
08 return 1;
09 }
10 HttpGet getter;
11 if (!getter.getFile(QUrl(args[1])))
12 return 1;
13 QObject::connect(&getter, SIGNAL(done), &app, SLOT(quit));
14 return app.exec;
15 }
Класс QHttp содержит много операций, включая
Мы можем применять функцию
http.setHost("www.example.com");
http.post("/cgi/somescript.py", "x=200&y=320", &file);
Мы можем передавать данные в виде 8-битовой строки либо передавать открытое устройство
QHttpRequestHeader header("POST", "/search.html");
header.setValue("Host", "www.trolltech.com");
header.setContentType("application/x-www-form-urlencoded");
http.setHost(www.trolltech.com);
http.request(header, "qt-interest=on&search=opengl");