找回密码
 立即注册
收起左侧

【网络访问GET】manager->get返回 qDebug为空

8
回复
3084
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2017-12-17 23:28:06 显示全部楼层 |阅读模式
2Qter豆
本帖最后由 飞舞的白雪 于 2017-12-17 23:29 编辑

最近在下想做一个读取网页源代码的调试工具,但是无论如何HTTP访问或者https访问都是返回空,有个别可以返回网页源码!实在没办法只能求助论坛大佬了!
调试了好多天了,实在是做不动了,请各位大佬在有空的时候帮在下看看吧,如果能提供 一点思路或者 访问部分的代码就更好了!先谢谢各位大佬!
具体代码如下:     m_manager = new QNetworkAccessManager(this);//新建QNetworkAccessManager对象   QNetworkRequest mRequest;   QSslConfiguration sslConf = QSslConfiguration::defaultConfiguration();    sslConf.setPeerVerifyMode(QSslSocket::VerifyNone);   // QSslConfiguration::setDefaultConfiguration(sslConf);   mRequest.setSslConfiguration(sslConf);   mRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");   mRequest.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8");   mRequest.setRawHeader("Accept-Encoding", "gzip, deflate");   mRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063");   mRequest.setUrl(QUrl("https://stac*****.com/"));   m_manager->get(mRequest);//发送请求   connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slot_replayFinished(QNetworkReply*))); //关联信号和槽}void Widget::slot_replayFinished(QNetworkReply *reply){    qDebug() << "replyFinished" << reply->readAll();    QTextCodec *codec = QTextCodec::codecForName("utf8");//使用utf8编码, 这样可以显示中文    QString str = codec->toUnicode(reply->readAll());    qDebug()<< str;    int nHttpCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();    qDebug()<<nHttpCode;    reply->deleteLater();//最后要释放replay对象}在访问*浪时,可以在抓包工具看到网页源码,调试输出却是空!

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

累计签到:535 天
连续签到:2 天
2017-12-18 09:14:36 显示全部楼层
你的请求确认可以返回源代码 ?
回复

使用道具 举报

累计签到:409 天
连续签到:1 天
2017-12-18 11:45:04 显示全部楼层
你把重定向到文件最好,
一般情况下可以打印出来,数据太多就会打印不出来。
我也遇到过
回复

使用道具 举报

累计签到:53 天
连续签到:1 天
2017-12-18 14:38:12 显示全部楼层
本帖最后由 angelus 于 2017-12-18 14:43 编辑

首先我不得不说,你用错代码了

m_manager->get(mRequest);//发送请求  
connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slot_replayFinished(QNetworkReply*)));

参考下这个写法,信号槽连接的对象不对.
p_reply = p_manager->post(request,byte);
connect(p_reply , SIGNAL(finished()) , this , SLOT(onFinished()));

你的第一种写法,运气好,可以在你发出的那一瞬间finished的时候有数据可以读取,运气不好有延迟,会是空数据对象的.
正确写法应该是捕捉QNetworkReply的finished信号,这意味了调用一定有返回了!
m_manager的finished仅仅意味着,发送信息成功了,但这个过程是异步的,所以返回的数据可能还在路上!
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2017-12-18 23:48:13 显示全部楼层
Since 发表于 2017-12-18 09:14
你的请求确认可以返回源代码 ?

在抓包工具可以看到数据
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2017-12-18 23:48:47 显示全部楼层
a408815041 发表于 2017-12-18 11:45
你把重定向到文件最好,
一般情况下可以打印出来,数据太多就会打印不出来。
我也遇到过 ...

好的,我去试试!感谢版主大佬
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2017-12-18 23:50:13 显示全部楼层
angelus 发表于 2017-12-18 14:38
首先我不得不说,你用错代码了

m_manager->get(mRequest);//发送请求  

原来如此,多谢大佬的提示,源码方面我是抓取的百度上的,可是他们都是正常。不是很理解这个!多谢大佬的回复!
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2017-12-19 00:17:33 显示全部楼层
angelus 发表于 2017-12-18 14:38
首先我不得不说,你用错代码了

m_manager->get(mRequest);//发送请求  

返回值还是为200,返回的数据还是空,也出现了OpenType support missing for script这样的错误!哇,有点难受了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:53 天
连续签到:1 天
2017-12-25 11:20:39 显示全部楼层
连接下p_reply的错误信号,看有没有错误返回!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册