[Qt-interest] QT 4.6: Strange behavior while using QNAM for multiple HTTP requests

Mandeep Sandhu mandeepsandhu.chd at gmail.com
Mon May 3 13:52:28 CEST 2010


Anybody got a chance to try the code out? Or am I committing too silly
a mistake?! :)

Thanks,
-mandeep

On Mon, May 3, 2010 at 11:19 AM, Mandeep Sandhu
<mandeepsandhu.chd at gmail.com> wrote:
> Hi All,
>
> I'm experiencing some strange behavior while using
> QNetworkAccessManager (QNAM) for fetching data from multiple URL's in
> a loop. The finished signal of QNAM is emitted TWICE for each URL,
> once with full data and next with 0 bytes. I'm not sure if my usage is
> correct or not.
>
> Here's the code snippet which actually starts the download in a loop.
> I have placed 2 files, test1.jpg and test2.jpg in webserver's (nginx)
> root.
>
> <snip>
> void download() {
>    for (int i=1; i<3; i++) {
>        QString urlStr = QString("http://localhost/test%1.jpg").arg(i);
>        qDebug() << urlStr;
>
>        QNetworkRequest req;
>        req.setUrl(QUrl(urlStr));
>        qDebug() << "Pipelining allowed -"
>                 <<
> req.attribute(QNetworkRequest::HttpPipeliningAllowedAttribute).toBool();
>
>        mgr->get(req);
>        connect(mgr, SIGNAL(finished(QNetworkReply*)),
>                this, SLOT(getData(QNetworkReply*)));
>    }
> }
>
> void getData(QNetworkReply* reply) {
>    qDebug() << "Reply for req" << reply->request().url();
>    qDebug() << "Status code"
>             <<
> reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
>
>    if (reply->error() != QNetworkReply::NoError) {
>        qDebug() << "Error fetching data from" << reply->url();
>        return;
>    }
>
>    qDebug() << "Bytes available" << reply->bytesAvailable();
>
>    QByteArray bytes = reply->readAll();
>    qDebug() << "Rx'ed" << bytes.size();
>    reply->deleteLater();
> }
> </snip>
>
> On the webserver I see only 2 requests landing, i.e for test1.jpg and
> test2.jpg. However, the getData() slot is getting called twice!
> readAll() is getting me the complete file the first time and in the
> next callback it's 0.
>
> Also, if I run the loop only once (i.e put only a single req for say
> test1.jpg, then the getData slot gets called only once!).
>
> The status code returned is 200 always.
>
> Also, the request object is showing that the HTTP Pipelining is NOT
> supported by QNAM. Why is this so? Is there anyway I can enable HTTP
> Pipelining? I'm running all this on Ubuntu 9.10 (not upgraded to lynx
> yet! :)).
>
> Any suggestions?
>
> (The full code is attached)
>
> Thanks,
> -mandeep
>




More information about the Qt-interest-old mailing list