2015-07-07 4 views
0

Я пытаюсь использовать HTML-код QNetworkAccessManager с URL-адресом. statusCode - 200. Отладка reply->readAll() имеет длину данных 35988. Но если я использую qDebug(), он печатает пустой.
My окружающая среда windown7 x32Chinese +qt5.5 x32(mingw). Я копирую этот код в linux(qt5.5 x64). работает.QT5 qDebug() << QByteArray empty

Может печатать содержимое 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

Вы должны подключиться к SIGNAL(finished()) в QNetworkReply, и сделать все это только один раз он готов к работе (то есть, когда вы получили готовый сигнал):

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(), а не все байты ответа. Возможно, вы можете проверить это, войдя в отладчик, возможно, у вас будут разные тайминги, и у вас появятся другие результаты.

Смежные вопросы