有一个Web服务器不支持SSLv2 HELO,因此我必须强制QWebView
执行SSLv3 HELO。不幸的是,以下内容不起作用:
QList ciphers = QSslSocket::supportedCiphers();
for (int i = ciphers.count() - 1; i >= 0; i--){
QSslCipher cipher = ciphers.at(i);
QSsl::SslProtocol protocol = cipher.protocol();
if (protocol == QSsl::SslV2){
ciphers.removeAt(i);
}
}
QSslSocket::setDefaultCiphers(ciphers);
答案 0 :(得分:4)
通过覆盖QNetworkAccessManager的createRequest虚拟函数,您可以强制它使用特定的ssl协议:
MyNetworkAccessManager::MyNetworkAccessManager(
QNetworkAccessManager *oldManager, QObject *parent /*= 0*/)
: QNetworkAccessManager(parent)
{
setCache(oldManager->cache());
setCookieJar(oldManager->cookieJar());
setProxy(oldManager->proxy());
setProxyFactory(oldManager->proxyFactory());
}
QNetworkReply* MyNetworkAccessManager::createRequest(
QNetworkAccessManager::Operation op, const QNetworkRequest &req,
QIODevice *device)
{
QSslConfiguration sslConfig = req.sslConfiguration();
sslConfig.setProtocol(QSsl::SslV3);
req.setSslConfiguration(sslConfig);
return QNetworkAccessManager::createRequest(op, req, outgoingData);
}
view = new QWebView(this);
QNetworkAccessManager *oldManager = view->page()->networkAccessManager();
MyNetworkAccessManager *newManager = new MyNetworkAccessManager(oldManager, this);
view->page()->setNetworkAccessManager(newManager);