我的应用程序由两个应用程序组成。其中一个可能要求另一个通过REST调用(调用本地主机上的URL)执行一些命令。为此,我们使用QNetworkAccessManager
(用于put、get和post请求)。
现在有一个问题-设备有时可能离线,当他这样做时-由于某种原因,我们不能通过访问管理器使用休息调用。当它使用的网络配置被破坏(如禁用Wifi适配器等)时,似乎会发生这种情况。当此配置恢复(启用Wifi)时,访问管理器再次开始工作。
另一个细节-当我们启动应用程序,而我们是离线的-它的工作,无论在线状态。这可能与此有关。
这在Win和Mac上都会复制。
所以问题是我如何可靠地使用QNetworkAccessManager用于此目的,而不管设备的在线状态?我们仅将此管理器用于本地主机REST调用。我应该设置什么默认网络配置或行为?
用法示例:
mNetManager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setRawHeader("User-Agent", "AppName/1.0");
request.setUrl(QUrl(url));
*reply = mNetManager->get(request);
编辑:在线状态是不需要的,因为我需要这个访问管理器仅用于访问浏览器上的本地url
看来你可以强制网络可访问性获取本地内容:
mNetManager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setRawHeader("User-Agent", "AppName/1.0");
request.setUrl(QUrl(url));
mNetManager->setNetworkAccessible(QNetworkAccessManager::Accessible); // <--
auto reply = mNetManager->get(request);
QNetworkAccessManager
有网络可用性的东西。为什么不用呢?
QNetworkAccessManager * mNetManager = new QNetworkAccessManager(this);
connect(mNetManager, &QNetworkAccessManager::networkAccessibleChanged,
this, &YourClass::slotExecutedWhenNetworkAccessibilityChanges);
NetworkAccessibility netAcc = mNetManager->networkAccessible();
switch (netAcc) {
case QNetworkAccessManager::Accessible:
// You are online.
break;
case QNetworkAccessManager::NotAccessible:
// You are offline.
break;
case QNetworkAccessManager::UnknownAccessibility:
default:
// You know nothing, Jon Snow.
break;
}