• 9968阅读
  • 9回复

有没有人遇到过QNetworkRequest必须请求两次以上才可以读取到数据的问题? [复制链接]

上一主题 下一主题
离线reyn
 

只看楼主 倒序阅读 楼主  发表于: 2014-09-20
最近在做一个项目,涉及到Qt的网络模块。
现在问题是这样的,之前request发送请求一次就可以从reply中读取到数据,但是现在必须请求两次才能从reqply中获得数据。有人遇到过这种问题吗?

代码大致是这样的:
  1. manager = new QNetworkAccessManagerment(this);
  2. QNetworkRequest request;
  3. request.setUrl(QUrl(url));
  4. QNetworkReply *reply = manager->get(reqeust);
  5. QEventLoop loop;
  6. connect(reply, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
  7. loop.exec();
  8. qDebug() << reply->readAll();  //没有数据
  9. reply = manager->get(reqeust);
  10. connect(reply, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
  11. loop.exec();
  12. qDebug() << reply->readAll();  //有数据



you take your love.
离线彩阳

只看该作者 1楼 发表于: 2014-09-20
应该在捕捉finish信号的时候再readAll()吧。
1条评分金钱+3
reyn 金钱 +3 - 2014-09-20
上海Qt开发联盟,热忱地欢迎你的加入!
离线reyn

只看该作者 2楼 发表于: 2014-09-20
回 彩阳 的帖子
彩阳:应该在捕捉finish信号的时候再readAll()吧。 (2014-09-20 12:41) 

加了QEventLoop之后可以等待finished()读完之后跳出loop.exec(),然后就可以读取reply->readAll()的内容了.
you take your love.
离线toby520

只看该作者 3楼 发表于: 2014-09-20
你这个是采用同步的方式去下载,个人建议使用异步下载比较好
1条评分金钱+5
reyn 金钱 +5 - 2014-09-20
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线reyn

只看该作者 4楼 发表于: 2014-09-20
回 toby520 的帖子
toby520:你这个是采用同步的方式去下载,个人建议使用异步下载比较好[表情]  (2014-09-20 14:10) 

异步下载指的是connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));这种方法吗?


我最开始用的就是这种方法,可以读的到数据,之后就没有改动,但是昨天开始突然读不出数据了。

经过测试,我用循环事件的方法让它再发送相同请求,再多读一次,然后发现第二次读取就有数据了。

不知道是什么原因?有没有可能是服务器的问题?
you take your love.
离线reyn

只看该作者 5楼 发表于: 2014-09-20
已解决,是对方服务器的问题,当我第一次请求的时候,默认的安全机制把我的请求链接重定向了,第二次请求则设置为正常。

同样感谢楼上的两位给出的回答。
you take your love.
离线彩阳

只看该作者 6楼 发表于: 2014-09-20
客户端都是这样调用的,所以肯定不是客户端的问题,我这样使用很多次了,都没有问题。
上海Qt开发联盟,热忱地欢迎你的加入!
离线reyn

只看该作者 7楼 发表于: 2014-09-20
回 彩阳 的帖子
彩阳:客户端都是这样调用的,所以肯定不是客户端的问题,我这样使用很多次了,都没有问题。 (2014-09-20 17:06) 

是的,我也是突然遇到这种问题,之前没有遇到过,让服务器那边写过滤器了。
you take your love.
离线toby520

只看该作者 8楼 发表于: 2014-09-22
给个建议:有时候你拿到的第一次的下载链接不一定是最终的url,中间可能需要重定向多次才能拿到最终的下载地址,这样做是为了防止服务器被黑还是咋的,所以你在读取返回的时候需要判断是否有重定向203的标识,然后在做处理,如果是重定向,你需要拿出重定向后的url在请求一次
话到此处不便言
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线reyn

只看该作者 9楼 发表于: 2014-09-30
回 toby520 的帖子
toby520:给个建议:有时候你拿到的第一次的下载链接不一定是最终的url,中间可能需要重定向多次才能拿到最终的下载地址,这样做是为了防止服务器被黑还是咋的,所以你在读取返回的时候需要判断是否有重定向203的标识,然后在做处理,如果是重定向,你需要拿出重定向后的url在请求一次
话到 .. (2014-09-22 09:49) 

Thanks
you take your love.
快速回复
限100 字节
 
上一个 下一个