Russian Qt Forum

Qt => Работа с сетью => Тема начата: L.E.O. от Май 02, 2011, 10:36



Название: Не корректная загрузка кода страницы
Отправлено: L.E.O. от Май 02, 2011, 10:36
Добрый день.
Помоги мне решить проблему. Она заключается в следующем: загружается не тот код страницы. Использую QNetworkAccessManager и его метод get. В чем может быть ошибка? Вот код программы:
Код:
class APNetworks : public QObject
{
    Q_OBJECT

signals:
    void finishedReplyHtml(const QString &html);

private slots:
    void finishedReply();

public:
    APNetworks(QObject *parent);

    void sendRequest(const QUrl &url);

private:
    QNetworkAccessManager *m_nam;
    QNetworkReply *m_reply;
};

APNetworks::APNetworks(QObject *parent) :
    QObject(parent)
{
    m_nam = new QNetworkAccessManager(this);
    m_reply = 0;
}

void APNetworks::sendRequest(const QUrl &url)
{
    m_reply = m_nam->get(QNetworkRequest(QUrl(url)));
    connect(m_reply, SIGNAL(finished()), this, SLOT(finishedReply()));
}

void APNetworks::finishedReply()
{
    QString html;
    QVariant redirectionTarget = m_reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
    if (m_reply->error())
    {
    }
    else if (!redirectionTarget.isNull())
    {
        QUrl newUrl = redirectionTarget.toUrl();
        m_reply->deleteLater();
        sendRequest(newUrl);
        return;
    }
    else
    {
        html = m_reply->readAll();
    }

    m_reply->deleteLater();
    m_reply = 0;

    emit finishedReplyHtml(html);
}

И сам запрос на страницу:
Код:
...
APNetworks *m_networks;
...

{
    ...
    QString search = "http://www.leoslyrics.com/listlyrics.php?hid=Pcrppju8n%2Bs%3D";
    disconnect(m_networks, SIGNAL(finishedReplyHtml(QString)), 0, 0);
    m_networks->sendRequest(QUrl(search));
    connect(m_networks, SIGNAL(finishedReplyHtml(QString)), this, SLOT(connectSearchFinished(QString)));
}

void APLyrics::connectSearchFinished(const QString &html)
{
    ...
}

Должна грузиться вот эта страница (как видно из части кода): http://www.leoslyrics.com/listlyrics.php?hid=Pcrppju8n%2Bs%3D (http://www.leoslyrics.com/listlyrics.php?hid=Pcrppju8n%2Bs%3D). Но грузится вот эта страница: http://www.leoslyrics.com/listlyrics.php?hid=Pcrppju8n+s= (http://www.leoslyrics.com/listlyrics.php?hid=Pcrppju8n+s=). Через браузер работает все ок. Даже через браузер из demo qt. Но через QNetworkAccessManager не хочет корректно работать. Что я делаю не верно?


Название: Re: Не корректная загрузка кода страницы
Отправлено: L.E.O. от Май 03, 2011, 20:38
Проблему решил с помощью библиотеки libcurl. Но мне все же интересно, как эту проблему решить с помощью Qt.


Название: Re: Не корректная загрузка кода страницы
Отправлено: Amigo_sa от Май 03, 2011, 21:19
Скорее всего, некорректно распозналась ваш урл.
Код:
QString search = "http://www.leoslyrics.com/listlyrics.php?hid=Pcrppju8n%2Bs%3D";
Попробуйте сформировать его с помощью метода
Цитировать
void QUrl::addEncodedQueryItem ( const QByteArray & key, const QByteArray & value )


Название: Re: Не корректная загрузка кода страницы
Отправлено: Etud от Май 04, 2011, 11:10
Просто Url раскодируется.