QNetworkAccessManager 和 XML 回复

Posted

技术标签:

【中文标题】QNetworkAccessManager 和 XML 回复【英文标题】:QNetworkAccessManager and Xml reply 【发布时间】:2012-06-13 20:29:05 【问题描述】:

我试图使用 QNetworkAccessmanager 向 localhost/conductor/api/provider_accounts.xml 发送请求,但问题是当我用浏览器打开它时,我会得到适当的输出,但是当我对 QNetworkAccessmanager 执行相同操作时,我就是什么都得不到。这是我的代码

  void ServiceProvider::replyFinished(QNetworkReply * reply)
 
 qDebug()<<reply->readAll();
 QString data=(QString)reply->readAll();
 qDebug()<<data;
 QXmlStreamReader xml(data);
 QXmlStreamAttributes attrib;
    while(!xml.atEnd())
        xml.readNextStartElement();
        if(xml.name()=="name" && !xml.isEndElement())
            attrib=xml.attributes();
            QString name=attrib.value("name").toString();
            qDebug()<<name;
            
    


void ServiceProvider::pushImage()

manager = new QNetworkAccessManager(this);
manager->get(QNetworkRequest(QUrl("https://localhost/conductor   
/api/provider_accounts.xml")));
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));

【问题讨论】:

您正在使用 https 协议的链接。您是否尝试连接 SSLErrors 信号并查看错误是什么? U mite 必须安装 OpenSSL。 【参考方案1】:

你不能看两次回复:

qDebug()<<reply->readAll();
QString data=(QString)reply->readAll();

上面的qDebug() 行将消耗所有数据。第二次调用readAll() 也是不正确的,因为它返回QByteArray。您不能像上面那样简单地将其转换为 QString 并期望它能够正常工作。您需要检查回复的编码并使用适当的转换函数,例如QString::fromUtf8(reply-&gt;readAll())

【讨论】:

正如我已经写过的那样,即使从第一个 readAll() 开始,我也什么也得不到。

以上是关于QNetworkAccessManager 和 XML 回复的主要内容,如果未能解决你的问题,请参考以下文章

QNetworkAccessManager 一个实例和连接槽

如何使用 QNetworkAccessManager 发送 DELETE 请求?

http请求中的QNetworkReply和QNetworkAccessManager超时

Qt 使用 QNetworkAccessManager 登录到 Steam

发布请求和 QNetworkAccessManager 的内存泄漏

离线使用 QNetworkAccessManager