我正在尝试以比我可以解析的字符串形式获取网页数据。我没有在qwebview,qurl和另一个中找到任何方法。你可以帮帮我吗? Linux,C++,Qt。

编辑:

感谢帮助。代码正在运行,但是下载后的某些页面字符集已损坏。
我尝试过类似的方法来修复它:

QNetworkRequest *request = new QNetworkRequest(QUrl("http://ru.wiktionary.org/wiki/bovo"));

request->setRawHeader( "User-Agent", "Mozilla/5.0 (X11; U; Linux i686 (x86_64); "
                       "en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" );
request->setRawHeader( "Accept-Charset", "win1251,utf-8;q=0.7,*;q=0.7" );
request->setRawHeader( "charset", "utf-8" );
request->setRawHeader( "Connection", "keep-alive" );

manager->get(*request);

任何结果=(。

最佳答案

你看过QNetworkAccessManager吗?这是一个粗略而现成的示例,说明用法:

class MyClass : public QObject
{
Q_OBJECT

public:
    MyClass();
    void fetch();

public slots:
    void replyFinished(QNetworkReply*);

private:
    QNetworkAccessManager* m_manager;
};


MyClass::MyClass()
{
    m_manager = new QNetworkAccessManager(this);

    connect(m_manager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(replyFinished(QNetworkReply*)));

}

void MyClass::fetch()
{
    m_manager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));
}

void MyClass::replyFinished(QNetworkReply* pReply)
{

    QByteArray data=pReply->readAll();
    QString str(data);

    //process str any way you like!

}

finished信号的处理程序中,您将传递一个QNetworkReply对象,您可以从中读取响应,因为它是从QIODevice继承的。一种简单的方法是调用readAll以获得QByteArray。您可以从该QByteArray构造一个QString,然后对其进行任何处理。

关于c++ - 我如何获取网页内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1053099/

10-13 03:06