Qt WebEngine使用来自Qt Network的代理设置,并将它们转发到Chromium的网络堆栈。如果设置了QNetworkProxy::applicationProxy,它也将用于Qt WebEngine。如果启用了QNetworkProxyFactory::usesSystemConfiguration(),则代理设置会自动从系统中检索。安装的QNetworkProxyFactory的设置将被忽略。
如果设置了QNetworkProxy::user()和QNetworkProxy::password(),这些凭据将自动用于代理身份验证。用户有责任提供有效的凭据,因为没有错误处理回调。
如果没有使用QNetworkProxy设置凭据,但代理需要身份验证,则会发出QWebEnginePage::proxyAuthenticationRequired信号。对于Qt Quick,会显示一个对话框。
并非所有QNetworkProxy的属性都被Qt WebEngine支持。也就是说,只考虑了QNetworkProxy::type()、QNetworkProxy::hostName()和QNetworkProxy::port()。所有其他代理设置(如 QNetworkProxy::rawHeader())都被忽略。
1、page->proxyAuthenticationRequired用法
在Qt中,page->proxyAuthenticationRequired
是一个信号,它在需要代理身份验证时发出。您可以将其连接到一个槽函数来处理身份验证。
例如,您可以使用以下代码来处理代理身份验证:
void handleProxyAuthReq(const QUrl &url, QAuthenticator *auth, const QString &proxyhost)
{
auth->setUser(username);
auth->setPassword(password);
}
webView->page()->proxyAuthenticationRequired.connect(handleProxyAuthReq);
上面的代码将 handleProxyAuthReq 函数连接到 proxyAuthenticationRequired 信号。当需要代理身份验证时,将调用此函数,并传递相关参数。在此函数中,您可以使用 QAuthenticator 对象的 setUser 和 setPassword 方法来设置用户名和密码https://stackoverflow.com/questions/43064194/qt-webengine-set-socks5-proxy
2、QNetworkProxy::applicationProxy() 的使用
QNetworkProxy::applicationProxy() 是一个静态方法,它返回应用程序级网络代理。您可以使用以下代码使应用程序自动支持网络代理12:
QNetworkProxy proxy;
proxy.setType(QNetworkProxy::Socks5Proxy);
proxy.setHostName("proxy.example.com");
proxy.setPort(1080);
proxy.setUser("username");
proxy.setPassword("password");
QNetworkProxy::setApplicationProxy(proxy);
3、QNetworkProxyFactory::usesSystemConfiguration()的使用
QNetworkProxyFactory::usesSystemConfiguration() 是一个静态方法,它返回一个布尔值,表示是否启用了系统代理设置。您可以使用 QNetworkProxyFactory::setUseSystemConfiguration(true) 来启用系统代理设置12。
例如:
QNetworkProxyFactory::setUseSystemConfiguration(true);
bool usingSystemConfig = QNetworkProxyFactory::usesSystemConfiguration();