Как мне сделать сетевой запрос в Qt привязкой к определенному интерфейсу / IP?

По состоянию на Qt 5 QHttp устарела и мы все должны используйте QNetworkAccessManager сейчас. Хорошо. Но как мне сделать запрос (HTTP или иным образом) с моего многосетевого компьютера, не чувствуя, что я играю в рулетку?

Если выхода нет, тогда что такое обходной путь? Для моего конкретного случая сейчас мне просто нужно скачать файл через HTTP. Но неужели нет способа сделать это в общем виде с QtNetwork?

2

Решение

Быстрый обходной путь будет использовать это в вашем файле проекта

QT += http

Это все еще доступно в отдельный модуль для совместимости.

1

Другие решения

Если вам повезло, что требуемый интерфейс является отдельным физическим (аппаратным) интерфейсом, вы можете сделать, например, (web_view это QWebView*):

QNetworkConfigurationManager config_manager;
QList<QNetworkConfiguration> configs = config_manager.allConfigurations();
bool found_interface = false;
QString desired_interface_name("eth1");
foreach (const QNetworkConfiguration &config, configs) {
if (config.name() == desired_interface_name) {
found_interface = true;
QNetworkAccessManager *network_access_manager = new QNetworkAccessManager;
network_access_manager->setConfiguration(config);
web_view->page()->setNetworkAccessManager(network_access_manager);
break;
}
}
if (!found_interface) {
//we failed to find the interface!
}

Опять же, это не будет работать, если IP связан с частью виртуального интерфейса одного физического интерфейса (например, eth1:1, eth1:2, так далее). Я все еще ищу решение для этого случая.

0

По вопросам рекламы [email protected]