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,这在 QNAMQNetworkReply *QNetworkAccessManager::createRequest
中可用作虚拟功能,最终您可以重新实现它并读取目标,然后如果它与您的非代理主机名之一匹配则禁用它。我没有试过这个。在创建连接之前没有调用任何有趣的插槽,所以我看不到任何其他可能性。
我明白了,在阅读了您的评论后,我刚刚检查了是否可以覆盖 QWebEngineView 代理,但似乎我不能。所以如果我理解正确, QWebEngineView 只需要应用程序范围的代理。没有像 QWebEngineView::setProxy 这样的东西。
是的,看起来像doc.qt.io/qt-5.10/qtwebengine-overview.html#proxy-support - 但是你可以修改Qt源代码,添加这样一个异常功能应该不会太难。以上是关于QNetworkProxy - 绕过某些地址的主要内容,如果未能解决你的问题,请参考以下文章
如何测试 Qt4 应用程序的正确 QNetworkProxy 工作?