HTTP
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer)的介绍:
以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL
层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
下面直接上代码:
// 头文件
QNetworkAccessManager* m_AccessManager;
QNetworkRequest m_Request;
public slots:
// 用来接收返回结果(异步的)
void replyFinishedRes(QNetworkReply *reply);
// cpp
m_AccessManager = new QNetworkAccessManager(this);
qDebug() << QSslSocket::supportsSsl();
qDebug() << m_AccessManager->supportedSchemes(); // 查看本地支持的协议
connect(m_AccessManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinishedRes(QNetworkReply *)));
如果本地不支持,不要着急,在QT目录下Qt5.14.2\Tools\mingw730_64\opt\bin
或者电脑其他地方搜索 libeay32.dll
和ssleay32.dll
将这两个dll拷贝到Qt5.14.2\5.14.2\mingw73_64\bin
目录下就可以了
高版本下如果还不可以,请继续搜索 libcrypto-1_1-x64.dll
和 libssl-1_1-x64.dll
,继续添加到 Qt5.14.2\5.14.2\mingw73_64\bin
目录下
如果出错可以在replyFinishedRes(QNetworkReply *)
槽函数中进行检查,以及是哪个网址返回的数据
代码:
if(reply->error() != QNetworkReply::NoError)
{
// 错误查看
QNetworkReply::NetworkError error = reply->error();
QString strError = "";
strError += "Https URL: ";
strError += reply->url().toString();
switch (error)
{
case QNetworkReply::ConnectionRefusedError:
strError += QString("错误原因: 远程服务器拒绝连接; 错误代码: ");
qDebug() << strError << reply->error();
break;
case QNetworkReply::HostNotFoundError:
strError += QString("错误原因: 远程主机名未找到(无效主机名); 错误代码: ");
qDebug() << strError << reply->error();
break;
case QNetworkReply::TooManyRedirectsError:
strError += QString("错误原因: 请求超过了设定的最大重定向次数; 错误代码: ");
qDebug() << strError << reply->error();
break;
default:
strError += QString("错误原因: 未知错误; 错误代码: ");
qDebug() << strError << reply->error();
break;
}
return;
}
QByteArray data = reply->readAll();
// 查看是哪个网址返回的数据
if(m_strHttps_URL == reply->url().toString())
{
getjson(data);
}
reply->deleteLater();