如何使用 QT QWebView 管理代理

Posted

技术标签:

【中文标题】如何使用 QT QWebView 管理代理【英文标题】:How do I manage proxies with QT QWebView 【发布时间】:2011-05-20 13:26:09 【问题描述】:

这就是我更改代理的方式:

QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("ip");
proxy.setPort(8008);

QNetworkProxy::setApplicationProxy(proxy);

如果我在创建 WebView 之前这样做,它会正常工作。但是,如果我在 QWebView 的生命周期内更改代理,它根本不会加载任何站点。 QT中动态更改代理的正确方法是什么?

谢谢。

【问题讨论】:

QNetworkProxy 文档中的注释说“注意:对当前连接的套接字所做的更改不会生效。如果您需要更改已连接的套接字,您应该重新连接它。” .你也试过 webview->page()->networkAccessManager()->setProxy(proxy); 【参考方案1】:

QWebPage::setNetworkAccessManager方法文档说

注意:目前不支持在 QWebPage 使用后更改网络访问管理器。这样做的结果是不确定的。

所以我的猜测是,一旦你设置了一个应用程序范围的代理,并且一旦构建了 QWebPage,它就会得到一个 QNetworkAccessManager,你就不能更改它的代理设置。

作为使用应用程序范围代理的替代方法,您可能可以创建一个新的 QNetworkAccessManager 并使用其 QNetworkAccessManager::setProxy() 方法来设置代理。然后将此 QNetworkAccessManager 实例传递到您的网页。

无论如何你都需要玩它。我希望这会有所帮助。

【讨论】:

以上是关于如何使用 QT QWebView 管理代理的主要内容,如果未能解决你的问题,请参考以下文章

QT:如何在点击事件上展开/折叠文本(qtextbrowser,qwebview,...)

Qt QWebView类自定义User-Agent

如何让 QWebView 释放线程?

Qt 5.3 使用原来的QT4.8.4项目时QWebView QWebFrame

如何在 Qt 设计器中使控件自动调整大小?

如何从 PyQT 调用 javascript 函数