我尝试从网址获取HTML QNetworkAccessManager
。 statusCode为200. debug reply->readAll()
的数据长度为35988.但如果我使用qDebug()
则打印为空。
我的环境windown7 x32
Chinese +qt5.5 x32(mingw)
。我将此代码复制到linux(qt5.5 x64)
。它在工作。
可以打印HTML内容,为什么?
请帮帮我。
我的代码是:
QEventLoop loop;
QTimer timer;
QNetworkRequest request;
request.setUrl(QUrl("http://mp.weixin.qq.com/s?__biz=MzA4MjAzMzg4NA==&mid=208317469&idx=4&sn=0928285db7c368e276e85519b3d0763b&3rd=MzA3MDU4NTYzMw==&scene=6#rd"));
request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36" );
request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8");
request.setRawHeader("Accept-Encoding", "none");
request.setRawHeader("Accept-Charset", "utf-8");
request.setRawHeader("Connection", "keep-alive");
request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
QNetworkReply *reply = manager->get(request);
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
timer.start(timeout);//超时10秒
loop.exec();
if(reply->error()){
qDebug()<<"error";
}
QByteArray res= reply->readAll();
reply->close();
reply->deleteLater();
// QString str = QString::fromUtf8(res.data(), res.size());
qDebug()<<statusCode;
qDebug()<<res;
答案 0 :(得分:1)
您应该连接到QNetworkReply的SIGNAL(finished())
,并且只有在准备好后(即收到完成的信号时)才能执行所有这些操作:
if(reply->error()){
qDebug()<<"error";
}
QByteArray res= reply->readAll();
reply->close();
reply->deleteLater();
// QString str = QString::fromUtf8(res.data(), res.size());
qDebug()<<statusCode;
qDebug()<<res;
可能你的问题是,在你调用readAll()
时,并没有完整的响应字节到达。也许你可以通过插入调试器来检查这一点,也许你会有不同的时间,并会获得其他结果。