gpt4 book ai didi

c++ - 网络回复始终为空,错误为 : RemoteHostClosedError

转载 作者:行者123 更新时间:2023-12-04 22:36:55 27 4
gpt4 key购买 nike

我有一个使用 x509 证书的安全 URL,我应该收到一个 JSON 作为答案。我的证书是 pfx 格式(ca 证书、本地证书、 key )。我将它添加到计算机上,当使用安全 URL 在 google chrome 和 Internet Explorer 上启动请求时,我确实有 JSON 作为答案。
我的问题是当我尝试在我的 Qt 应用程序中做同样的事情时,我没有来自同一个 URL 的任何答案。我的代码:

    QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setProtocol(QSsl::TlsV1_2);

_manager = std::make_unique<QNetworkAccessManager>();
auto line = "myurl";
qInfo() << line;

QNetworkRequest request((QUrl::fromUserInput(line)));
request.setSslConfiguration(config);

QEventLoop loop;
connect(_manager.get(), &QNetworkAccessManager::finished, &loop,
&QEventLoop::quit,
Qt::DirectConnection);

connect(_manager.get(), &QNetworkAccessManager::sslErrors, this,
&CheckConfController::sslErrors);

_loginReply = std::unique_ptr<QNetworkReply>(_manager->get(request));

connect(_loginReply.get(), &QNetworkReply::readyRead,
this, &CheckConfController::replyFinished);
connect(_loginReply.get(), &QNetworkReply::finished,
this, &CheckConfController::_loginReceive);
loop.exec();
登录接收方法:
void CheckConfController::_loginReceive(){
qInfo() << "status code : " << _loginReply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
qInfo() << "error : " << _loginReply->error();
qInfo() << "error string : " << _loginReply->errorString();
QByteArray b = _loginReply->readAll();
qInfo() << "byte : " << b;
}
SSL错误方法:
void CheckConfController::sslErrors(QNetworkReply* reply, const QList<QSslError> &errors)
{
QByteArray b = reply->readAll();
qInfo() << "reply : " << b;

for(auto element : errors){
qInfo() << "ssl error : " << element;

}
}
这是 mu 输出:
status code: QVariant(Invalid)
error: QNetworkReply::RemoteHostClosedError
err string: "Connection Closed"
byte : ""
永远不会调用 SSL 错误。
我将我的 URL 行切换到 https://www.google.com它工作正常。我还尝试了其他网址,并且我正确收到了我的 json。
这是我的配置:
Qt version: 5.12.11
compiler: MSVC 2017 64 bits
Computer running the application: Windows 7
任何帮助,将不胜感激。谢谢你。

最佳答案

更新
在此答案下方发表评论后,我注意到 OP 尝试访问的服务器具有证书限制,因此默认为系统证书不是一种选择,因为我们无法确定使用哪个证书。
既然我们知道了,我建议确保您的证书在某种程度上是首选,例如尝试:

QSslConfiguration::setDefaultConfiguration(config);
我的意思是,在 OP 的原始代码末尾:
QSslKey key;
QSslCertificate certificate;
QList<QSslCertificate> certChain;

bool imported = QSslCertificate::importPkcs12(&pfxFile, &key, &certificate, &certChain, "mypassphrase");
qInfo() << "imported : " << imported;


QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setCaCertificates(certChain);
config.setLocalCertificate(certificate);
config.setPrivateKey(key);
config.setProtocol(QSsl::TlsV1_2);
旧答案
正如评论所说:
  • OP 不再手动添加证书(并将其添加到系统中),
  • 此外,OP 的代码适用于其他 HTTPS网址。
  • 最后但并非最不重要的一点是,OP 的站点具有有效的证书,并且日志只提到了关闭的连接。

  • 算起来,这似乎与 Qt 没有任何关系。 OP 的网站只是拒绝任何 JSON要求。

    Maybe try setting auth header (or, do whatever else the site's requirements are).

    I usually use Postman App (to test sites' API and routes).

    关于c++ - 网络回复始终为空,错误为 : RemoteHostClosedError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71572307/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com