Qt 之 使用 https:// 发送 HTTP请求

本文介绍在Qt中如何实现HTTPS请求,并进行SSL认证。HTTPS相较于HTTP更安全,通过加入SSL协议确保数据传输安全。文章详细讲解了SSL认证所需步骤及代码实现。
该文章已生成可运行项目,

一、简述

在使用Qt发送HTTP请求中一般使用的链接都是http://前缀,而有的服务器支持 https://前缀的链接,而Qt本身是支持https的,但是https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在Qt中使用https需要进行SSL认证。实现非常容易,简单几步即可完成。

二、HTTPS和HTTP的区别

1、简介

超文本传输协议HTTP被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

2、区别

https协议需要到ca申请证书,一般免费证书很少,需要交费。

http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

三、如何进行SSL认证

1、首先,因为需要Openssl支持,使用SSL进行认证,所以需要对应的库文件 libeay32.dllssleay32.dll。需要下载libeay32.dllssleay32.dll两个库文件,将这两个库文件拷贝到程序生成目录下(即生成exe的同级目录)或者拷贝到QtNetwork模块的库文件目录中。
2、在发送HTTP请求之前加上如下代码
void onSendHttpsRequest(QString url)
{
	QNetworkAccessManager* pManager = new QNetworkAccessManager(this);
	QNetworkRequest request;
	
	// 发送https请求前准备工作;
    QSslConfiguration config;
    QSslConfiguration conf = request.sslConfiguration();
    conf.setPeerVerifyMode(QSslSocket::VerifyNone);
    conf.setProtocol(QSsl::TlsV1SslV3);
    request.setSslConfiguration(conf);
    
	request.setUrl(QUrl(url));       // "https://www.temp.com"
	QNetworkReply *pReply = pManager->post(request, bytePost);

	connect(pReply , SIGNAL(finished()) , this , SLOT(onFinished());
	connect(pReply , SIGNAL(error(QNetworkReply::NetworkError)) , this , SLOT(onError(QNetworkReply::NetworkError)));
}

// 请求完成;
void onFinished()
{
	QNetworkReply *pReplay = qobject_cast<QNetworkReply*>(sender());
	// 保存接受的数据;
	QByteArray replyContent = pReplay->readAll();
}

// 请求失败;
void onError(QNetworkReply::NetworkError errorCode)
{
	QNetworkReply *pReplay = qobject_cast<QNetworkReply*>(sender());
	// 输出错误码及错误信息;
	qDebug()<< errorCode;
	qDebug()<< pReplay->errorString();
}

关于两个库文件下载

1、在 http://slproweb.com/products/Win32OpenSSL.html 中下载 Win32 OpenSSL进行安装,将bin目录下面的库拷贝出来放到生成程序exe同级目录下即可。

2、 libeay32.dll 、 ssleay32.dll动态链接库 直接在我的资源中进行下载。

本文章已经生成可运行项目
由于给定引用中未提及https://push2.eastmoney.com/api/qt/ulist.np/get API的相关信息,下面基于常见的API分析思路提供一般性解答。 ### 功能 通常,此类API可能用于获取东方财富平台上特定的金融数据列表。推测`ulist.np`可能代表某种类型的列表数据,可能是股票列表、基金列表等,`np`也许与分页、非分页或者特定的数据类型有关。 ### 使用方法 以下是一个使用Python的`requests`库调用该API的示例代码: ```python import requests url = 'https://push2.eastmoney.com/api/qt/ulist.np/get' headers = {'content-type': "application/json"} # 可能需要根据实际情况添加查询参数 params = { # 这里可根据实际情况补充具体的参数 'param1': 'value1', 'param2': 'value2' } response = requests.get(url, headers=headers, params=params) if response.status_code == 200: print(response.json()) else: print(f"请求失败,状态码: {response.status_code}") ``` 上述代码中,首先定义了API的URL和请求头,然后可以根据实际需求添加查询参数。使用`requests.get`方法发送请求,如果响应状态码为200,表示请求成功,将返回的JSON数据打印出来;否则,打印请求失败的状态码。 ### 返回数据格式 一般来说,API返回的数据格式可能是JSON。返回的数据可能包含一个或多个字段,例如: - `code`:表示请求的状态码,如200表示成功。 - `msg`:请求的状态信息,如成功或失败的提示。 - `data`:包含具体的数据内容,可能是一个列表或字典,具体取决于API的设计。 例如,返回的JSON数据可能如下所示: ```json { "code": 200, "msg": "请求成功", "data": [ { "field1": "value1", "field2": "value2" }, { "field1": "value3", "field2": "value4" } ] } ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值