• 3925阅读
  • 7回复

[提问]为什么用Qt获取某些网页上的数据失败? [复制链接]

上一主题 下一主题
离线y1363386323
 

只看楼主 倒序阅读 楼主  发表于: 2017-12-23
我想用Qt获取网页上的数据, 可为什么有些网站上的数据能得到, 而有些网站上的数据不能得到?
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void replyFinished(QNetworkReply *reply);

private:
    Ui::MainWindow *ui;

    QNetworkAccessManager *manger;
};


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    manger=new QNetworkAccessManager;
    manger->get(QNetworkRequest(QUrl("http://www.suse.edu.cn/")));

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

void MainWindow::replyFinished(QNetworkReply *reply)
{
    QTextCodec *codec=QTextCodec::codecForName("utf8");  //使用utf8编码, 这样可以显示中文
    QString str =codec->toUnicode(reply->readAll());
    ui->textBrowser->setText(str);

    reply->deleteLater();  //最后要释放replay对象
}

如上所示, 如果网站是  http://www.suse.edu.cn/  则能够得到数据.
如果把网站换成  http://www.aicai.com/  则不能得到数据, 不知道哪出了问题???


离线hitler++

只看该作者 1楼 发表于: 2017-12-25
301,302,304 状态
content-encoding
QNetworkAccessManager的get能帮你全部处理吗?
离线y1363386323

只看该作者 2楼 发表于: 2017-12-25
回 hitler++ 的帖子
hitler++:301,302,304 状态
content-encoding
QNetworkAccessManager的get能帮你全部处理吗? (2017-12-25 08:48) 

你说的我不明白, 你知道是哪出了问题吗?
离线linker

只看该作者 3楼 发表于: 2017-12-25
看一下错误信息,设置相应的header
做土豆长大的孩纸
离线y1363386323

只看该作者 4楼 发表于: 2017-12-25
回 linker 的帖子
linker:看一下错误信息,设置相应的header
 (2017-12-25 09:45) 

看错误信息没有用, 根本不知道哪出了问题, 大侠, 高抬贵手帮帮我
离线angelus

只看该作者 5楼 发表于: 2017-12-25
p_reply = p_manager->post(request,byte);

    connect(p_reply , SIGNAL(finished()) , this , SLOT(onFinished()));
    connect(p_reply , SIGNAL(error(QNetworkReply::NetworkError)) , this , SLOT(onError(QNetworkReply::NetworkError)));

在类中定义一个 QNetworkReply 的指针,然后再请求的地方连接 finished信号和error信号.
然后看下错误信槽里边的输出

//请求失败
void onError(QNetworkReply::NetworkError errorCode)
{
    // 输出错误码及错误信息;
    qDebug() << "error: " << errorCode;
    qDebug() << "error: " << p_reply->errorString();
    //延迟删除
    p_reply->deleteLater();
}
离线tonyzhou1985

只看该作者 6楼 发表于: 2017-12-26
QNetworkAccessManager只能请求url路径的文件,不能算是一个网页,这个文件包含的脚本等文件都不会下载,也不会执行脚本。建议用webview,然后通过qwebframe提取内容
离线y1363386323

只看该作者 7楼 发表于: 2018-01-11
回 tonyzhou1985 的帖子
tonyzhou1985:QNetworkAccessManager只能请求url路径的文件,不能算是一个网页,这个文件包含的脚本等文件都不会下载,也不会执行脚本。建议用webview,然后通过qwebframe提取内容 (2017-12-26 08:52) 

按你的方法成功了,谢谢!!!!
快速回复
限100 字节
 
上一个 下一个