离线使用QNetworkAccessManager

时间:2016-08-11 12:19:22

标签: qt qt5 qnetworkaccessmanager

我的应用程序包含两个应用程序。其中一个可能会要求另一个人通过REST调用执行一些命令(在localhost上调用一个URL)。为此,我们使用QNetworkAccessManager(用于put,get和post请求)。

现在有一个问题 - 设备有时可能会脱机,当他这样做时 - 出于某种原因我们无法通过访问管理器使用其他呼叫。它似乎发生在它使用的网络配置被破坏时(如禁用Wifi适配器等)。恢复此配置(启用Wifi)后,访问管理器将再次开始工作。

另一个细节 - 当我们离线时启动应用程序 - 无论在线状态如何,它都能正常运行。它可能与this有关。

这在Win和Mac上都会重现。

所以问题是,无论设备在线状态如何,我如何可靠地使用QNetworkAccessManager用于此目的?我们仅将此管理器用于localhost REST调用。我应该设置什么默认网络配置或行为?

以下用法示例:

mNetManager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setRawHeader("User-Agent", "AppName/1.0");
request.setUrl(QUrl(url));
*reply = mNetManager->get(request);

编辑:不需要在线状态,因为我只需要此访问管理器来访问浏览器上的本地URL

2 个答案:

答案 0 :(得分:2)

您似乎可以强制网络辅助功能获取本地内容:

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);

答案 1 :(得分:0)

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;
}