c++ - 我怎样才能得到网页的内容

标签 c++ qt webpage

我正在尝试获取我无法解析的字符串形式的网页数据。我没有在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 .你可以构造一个 QString从那个 QByteArray 开始,用它做任何你想做的事。

关于c++ - 我怎样才能得到网页的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053099/

相关文章:

c++ - [[弃用]] 导致 VS2017 中的构建失败(错误 C4996)

c++ - 为什么我不能通过这个功能? C++

python - Ghost.py 和代理

c++ - Qt 的上下文相关帮助

c++ - 如何从驻留在其他 git 存储库中的插件访问应用程序中定义的 interfaces.h?

c++ - 如何在 C++ 中获取文件的 MD5 哈希?

c++ - cv::Mat 中 cv::Point 的 OpenCV rgb 值

javascript - 如何让网页只显示一次?

javascript - 使用没有 Greasemonkey 的 Javascript 使用 Firefox 扩展动态更改网页内容

html - 在非本地服务器上将 reveal.js 幻灯片 (.html) [Jupyter 笔记本导出] 作为网页托管