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

各位,最近小弟使用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();//出问题,开分析软件就正常,不开数据不正常?????????为什么

}





结贴了。问题找到了,是出问题的页面http get提header的时候压缩方式提交了gzip和deflate,返回的数据content-type为gzip压缩数据,导致数据有问题。但是打开了分析软件不知道怎么的返回给我的数据是为压缩的数据。后来自己在发送get头的时候去掉了gzip就ok了,最好的方法还是以解压缩方式收数据。以后再搞吧。结贴!望以后也有这个问题的人,可以快速解决这个问题
networkRequest.setRawHeader("Accept-Encoding", "gzip, deflate");改为
networkRequest.setRawHeader("Accept-Encoding", "deflate");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值