QNetworkReply的readAll读取数据一定要开分析软件才能正确读取数据。

shushi007 2015-09-16 11:32:50
各位,最近小弟使用QT4的QNetworkAccessManager来读取网页内容,当使用QNetworkReply的readAll读取数据的时候,出现了这种情况。
由于是使用QNetworkRequest 来模拟http协议,当打开http协议分析软件查看自己写的程序发送的包的情况,打开分析软件分析 (fiddler,HttpAnalyzer)qt程序到readAll的时候读取的内容是正常的。但是一旦关闭分析软件查看,readAll读取的数据就是错误的。读取的长度比正确的长度小,而且返回的QByteArray数据里面,中间一部分数据都是0,直接转化为QString只截取到了QByteArray前面一部分。大家有遇到这个情况没?为什么开了分析软件收到数据就是正常的?
代码如下:
networkRequest=QNetworkRequest(); networkRequest.setRawHeader("Accept","text/html, application/xhtml+xml, */*");
networkRequest.setRawHeader("Referer","http://www.XXX.com");
networkRequest.setRawHeader("Accept-Language","zh-CN");
networkRequest.setRawHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
networkRequest.setRawHeader("Accept-Encoding", "gzip, deflate");
networkRequest.setRawHeader("Host", this->btdownloadurl.encodedHost());
networkRequest.setRawHeader("Connection", "Keep-Alive"); networkRequest.setRawHeader("Cache-Control", "no-cache");
networkAccessManager->setCookieJar(cookiejar);//加载之前登录的cookie
networkRequest.setUrl(url);
QNetworkReply * networkReply=networkAccessManager->get(networkRequest);
QEventLoop loop;
QObject::connect(networkReply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QVariant statuscode = networkReply>attribute(QNetworkRequest::HttpStatusCodeAttribute);
if(statuscode.toInt()==200 )
{
QByteArray arr=networkReply->readAll();//出问题,开分析软件就正常,不开数据不正常?????????为什么
}


麻烦各位了。
...全文
558 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
GreenArrowMan 2015-09-17
  • 打赏
  • 举报
回复
收藏了。
shushi007 2015-09-16
  • 打赏
  • 举报
回复
结贴了。问题找到了,是出问题的页面http get提header的时候压缩方式提交了gzip和deflate,返回的数据content-type为gzip压缩数据,导致数据有问题。但是打开了分析软件不知道怎么的返回给我的数据是为压缩的数据。后来自己在发送get头的时候去掉了gzip就ok了,最好的方法还是以解压缩方式收数据。以后再搞吧。结贴!望以后也有这个问题的人,可以快速解决这个问题 networkRequest.setRawHeader("Accept-Encoding", "gzip, deflate");改为 networkRequest.setRawHeader("Accept-Encoding", "deflate");

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧