[英]Request JSON in Qt
首先,在我开始发表文章之前,我想告诉我我读了这个话题
使用QNetworkRequest的HTTP POST的正确格式
我使用这个想法,但对我来说却行不通。 我也阅读了其他一些主题,但是一直没有解决。 因此可能是因为我有点想念(肯定)。
现在,我将显示什么请求适用于html文件
<html>
<body>
<form method="POST" action="http://192.168.1.108/acces.cgi">
<input type="text" name="json"
value='{"method":{"ok":"get","number":1}}' size="100">
<input type="submit">
</form>
</body>
</html>
发送此请求后,我会在浏览器中得到答案。 因此,确保JSON请求正确无误。
现在我想尝试发送同样的请求,但是使用Qt,所以我写了下面的代码,但我只好交战
qt.network.ssl: QSslSocket: cannot resolve SSlv2_client_method
qt.network.ssl: QSslSocket: cannot resolve SSlv2_server_method
和我的代码
QUrl url("http://192.168.1.108/acces.cgi"); // request to local host
QNetworkRequest *request = new QNetworkRequest(url);
request>setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
manager = new QNetworkAccessManager();
QObject::connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(HandledDataFromNetwork(QNetworkReply*)));
// prepare JSON string
QByteArray array= "{\"method\":{\"ok\":\"get\",\"number\":\"1\"}}";
// and Send
reply = manager->post(*request, array);
// next I wait for signal and try recive in slot
void MyClass::HandledDataFromNetwork(QNetworkReply *reply)
{
qDebug() << "content" << reply->readAll();
}
但是期待警告我一无所有。
附言 抱歉,在Qt中代码看起来如何,我无法更好地纠正preper
编辑:解决了!
答案是使用QUrlQuery类。 因此代码应如下所示:
QUrl url("http://192.168.1.109/ask.cgi");
QUrlQuery query;
query.setQuery("json={\"ctrl\":{\"c":\"gd\",\"i\":6}}");
url.setQuery(query);
QNetworkRequest req(url);
QNetworkAccessManager test;
QEventLoop loop;
connect(&test, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
QNetworkReply * reply = test.get(req);
loop.exec();
:)
这个错误:
qt.network.ssl: QSslSocket: cannot resolve SSlv2_client_method
可能是因为QT无法找到OpenSSL。 如果您使用的是Windows,则必须获取一些OpenSSL二进制文件,并将其放入可执行文件所在的文件夹中。 如果您使用的是Linux,请通过软件包管理器apt-get install openssl
对于基于Debian的系统,使用apt-get install openssl
)。
另外,如果您要发送JSON数据,请查看QTs JSON支持 ,它将使发送/解析JSON数据更加容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.