【问题标题】:Suppressing SSL errors抑制 SSL 错误
【发布时间】:2013-01-11 20:06:51
【问题描述】:

我希望能够读取以 SSL 模式从网页发回的标头。但是,我的 Qt 应用程序无法访问网页,因为我正在收集它处于 SSL 模式?使用此连接可以在我的应用中使用 SSL 进行正常的 webview 浏览:

connect(view->page()->networkAccessManager(), SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )),
                        this, SLOT(onSslErrors(QNetworkReply*, const QList<QSslError> & )));

这会抑制 webview 中的 SSL 错误,但我有一个单独的函数,它使用此方法获取标题:

//Send a request to validate URL
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setUrl(QUrl(text));
request.setRawHeader("User-Agent", "MyApp1.0");
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
                  QNetworkReply *reply = manager->get(request);
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();

qDebug() << "QLoop: " << reply->rawHeader("My-Application");
  if(reply->rawHeader("My-Application") == "1"){
      appUrl = text;
  }

我需要这个方法,因为在应用程序使用webview-&gt;load(QURL(appUrl )) 连接到它之前,我在其中设置了一个包含我们的 webapps URL 的配置文件。只是不确定如何使用 QNetworkAccessManager 抑制/处理 SSL 错误?

【问题讨论】:

    标签: c++ qt qtwebkit


    【解决方案1】:

    您需要将 QNAM 对象信号 sslErrors(QNetworkReply *, QList&lt;QSslError&gt;) 连接到您设置 QNetworkReply::ignoreSslErrors() 的插槽,这样 QNAM 才能继续运行。 Qt Docs on it.

    【讨论】:

    • 非常感谢,我在中间某处尝试了reply-&gt;ignoreSslErrors();,但没有成功,所以我会试试你的方法:)
    • 没关系,我第一次尝试时完全忽略了正在发出的信号并将reply-&gt;ignoreSslErrors() 放在我创建 QNAM 的位置。简单的错误!
    • 我唯一发现的是SIGNAL(sslErrors(QNetworkReply*, const QList&lt;QSslError&gt; &amp; )), SLOT(onSslErrors(QNetworkReply*, const QList&lt;QSslError&gt; &amp; ))); 有时会被解雇,有时不会?也许我暗示错了?这是我的第一个 Qt 应用程序大声笑 - @Nicholas Smith
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多