QNetworkProxy - 绕过某些地址

Posted

技术标签:

【中文标题】QNetworkProxy - 绕过某些地址【英文标题】:QNetworkProxy - Bypass Certain Addresses 【发布时间】:2018-04-05 14:41:09 【问题描述】:

在我的 QT5 应用程序(Windows 环境)中,我正在使用以下方式设置应用程序范围的代理:

        QNetworkProxy proxy;
        proxy.setType(QNetworkProxy::HttpProxy);
        proxy.setHostName(proxyHost);
        proxy.setPort(proxyPortInt);

我的客户有一个他们代理的例外列表。但是,当我按上述方式设置代理时,该异常列表并未按预期使用。

在 Internet 选项中,您可以将例外列表指定为:

所以我的问题是:

    我可以得到那个例外列表吗? 我能否以某种方式将此例外列表注册到 QNetworkProxy?

编辑: 我注意到我可以从注册表中获取该异常列表:

Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ ProxyOverride

【问题讨论】:

【参考方案1】:

没有。 QNetworkProxy 没有例外列表。如果您使用应用程序范围的代理,您可以做的最好的事情是通过调用serverSocket->setProxy(QNetworkProxy::NoProxy) 禁用某些套接字的代理,但您不能为某些主机名禁用它。您必须在建立连接之前检查是否应使用代理,然后禁用或设置它。

【讨论】:

有关如何为 QNetworkAccessManager 或 QWebEngineView 实现此功能的任何帮助? @OzanYukruk 看看 Qt 源码。 github.com/radekp/qt/blob/master/src/network/access/… - 它在连接之前调用 createRequest,这在 QNAM QNetworkReply *QNetworkAccessManager::createRequest 中可用作虚拟功能,最终您可以重新实现它并读取目标,然后如果它与您的非代理主机名之一匹配则禁用它。我没有试过这个。在创建连接之前没有调用任何有趣的插槽,所以我看不到任何其他可能性。 我明白了,在阅读了您的评论后,我刚刚检查了是否可以覆盖 QWebEngineView 代理,但似乎我不能。所以如果我理解正确, QWebEngineView 只需要应用程序范围的代理。没有像 QWebEngineView::setProxy 这样的东西。 是的,看起来像doc.qt.io/qt-5.10/qtwebengine-overview.html#proxy-support - 但是你可以修改Qt源代码,添加这样一个异常功能应该不会太难。

以上是关于QNetworkProxy - 绕过某些地址的主要内容,如果未能解决你的问题,请参考以下文章

Qt之QNetworkProxy(网络代理)

QNetworkProxy 中的 Socks4 代理支持

如何测试 Qt4 应用程序的正确 QNetworkProxy 工作?

Qt 5.7 QNetworkProxy 不考虑 cookie

ASP.NET 如何控制用户绕过登录直接进入登录后的界面?

利用加载模块之外的地址绕过 SafeSEH