我一直在 Qt 中使用 SSL,我需要设置特定的协议(protocol)(而不是默认的“安全协议(protocol)”)。看起来这可行:
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setProtocol(QSsl::TlsV1_0);
QSslConfiguration::setDefaultConfiguration(config);
但是以这样的全局方式设置协议(protocol)让我感到不舒服,而不是在QWebPage
或QWebView
或其他东西上设置它。我是否遗漏了一些明显的东西,或者这真的是最好的方法吗?我知道我可以在 SSL 套接字上设置它,但我使用的是 QtWebKit,并且无权访问各个套接字。
最佳答案
我发现做到这一点的方法是扩展QNetworkAccessManager
并在 createRequest
中设置协议(protocol):
class NetworkAccessManager : public QNetworkAccessManager
{
Q_OBJECT
public:
explicit NetworkAccessManager(QObject *parent = 0);
protected:
virtual QNetworkReply * createRequest(Operation operation, const QNetworkRequest & request, QIODevice * outgoingData = 0) {
// I have no idea why request is const, but I need to change it
QNetworkRequest notConstRequest = request;
QSslConfiguration conf = notConstRequest.sslConfiguration();
conf.setProtocol(QSsl::TlsV1_0);
notConstRequest.setSslConfiguration(conf);
return QNetworkAccessManager::createRequest(operation, notConstRequest, outgoingData);
}
};
然后我可以使用 setNetworkAccessManager
在我的 QWebpage
中设置它.
关于qt - 这是使用 QWebPage 设置 SSL 协议(protocol)的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11941630/