折腾了好几天终于搞定了,分享一下结果吧

首先网上找的资料都说是要安装openssl,然后把它的两个dll引用进来,libeay32.dll和ssleay32.dll.

出于跨平台的想法,不太想用这个方法,研究了QT其实提供了sslsonfiure方法,应该是支持的。但是各种尝试下来,各种连接失败。

提示qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method。

经过网上查找,发现QT其实是包含了这个文件,但是并不在环境变量配置下的目录,需要操作一下,文件名和openssl的文件是一样的,具体是不是一样的,反正我是屈服了。

Qt的这个目录下:D:\Qt\Qt5.4.2\Tools\mingw491_32\opt\bin。自带libeay32.dll和ssleay32.dll.

只需要把这个目录下的两个dll拷贝到D:\Qt\Qt5.4.2\5.4\mingw491_32\bin,

就不会提示qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method。

然后就是测试它的证书先选项,选项不对服务器是不会接收报文的,经过尝试,选择VerifyFNone这个选项。有兴趣的人,可以继续深入了解,反正我是解决问题就好。

HTTPS连接时,可以设置各种证书选项,测试下来,只有VerifyNone和QueryPeer可以进行通讯,其它两个请求被服务器挡掉了。如果有牛人知道,麻烦回复下面,谢谢!
  
Constant Value Description
QSslSocket::VerifyNone 0 QSslSocket will not request a certificate from the peer. You can set this mode if you are not interested in the identity of the other side of the connection. The connection will still be encrypted, and your socket will still send its local certificate to the peer if it's requested.
QSslSocket::QueryPeer 1 QSslSocket will request a certificate from the peer, but does not require this certificate to be valid. This is useful when you want to display peer certificate details to the user without affecting the actual SSL handshake. This mode is the default for servers.
QSslSocket::VerifyPeer 2 QSslSocket will request a certificate from the peer during the SSL handshake phase, and requires that this certificate is valid. On failure, QSslSocket will emit the QSslSocket::sslErrors () signal. This mode is the default for clients.
QSslSocket::AutoVerifyPeer 3 QSslSocket will automatically use QueryPeer for server sockets and VerifyPeer for client sockets.
下面是具体代码

#include <QCoreApplication>
#include <QString>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonObject>
#include <QJsonDocument>
#include <QNetworkAccessManager>
#include <iostream>
#include <QDebug>
#include <QEventLoop>
#include <QObject>
void post(){
    QNetworkAccessManager* manager = new QNetworkAccessManager;
    QNetworkRequest request;
    QByteArray line;
    QEventLoop eventLoop;
    request.setUrl(QUrl("http://test.le.xxxxx.com/api/user/log"));
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
    QByteArray append("{\"user\":\"david\",\"token\":\"e10adc3949ba59abbe56e057f20f883e\"}");
    QNetworkReply* reply = manager->post(request, append);
    QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    eventLoop.exec();
    line=reply->readAll();
    qDebug() << "response:" << line;
}
void get(){
    QNetworkAccessManager* manager = new QNetworkAccessManager;
    QNetworkRequest request;
    QByteArray line;
    QEventLoop eventLoop;
    request.setUrl(QUrl("http://test.le.xxxxxx.com/api/user/log"));
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
    QNetworkReply* reply = manager->get(request);
    QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    eventLoop.exec();
    line=reply->readAll();
    qDebug() << "response:" << line;
}
void sslPost(){
    QNetworkAccessManager* manager = new QNetworkAccessManager;
    QNetworkRequest request;
    QByteArray line;
    QEventLoop eventLoop;
    QSslConfiguration conf = request.sslConfiguration();
    conf.setPeerVerifyMode(QSslSocket::VerifyNone);   //证书选项
    conf.setProtocol(QSsl::TlsV1SslV3);               //协议,建议用这个TLS与SSL通用的
    request.setSslConfiguration(conf);
    request.setUrl(QUrl("https://staging.api.xxxxx.com/api/auth"));
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
    request.setRawHeader("X-AUTH-OID","3DzedgMnCc1Vtys9t");
    QByteArray append("{\"user\":\"david\",\"token\":\"e10adc3949ba59abbe56e057f20f883e\"}");
    QNetworkReply* reply = manager->post(request, append);
    QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    eventLoop.exec();
    line=reply->readAll();
    qDebug() << "response:" << line;
}
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);  //没它QT程序跑不起来。
    sslPost();
    return a.exec();
}
 
                                    Qt+Cutelyst学习笔记(二十七)win10+Qt5.15.2+qmake实现一个简单的RESTful服务器 示例源码
https://blog.csdn.net/aggs1990/article/details/124115368
CSDN审核可能较慢,如无法下载,可以过段时间再回来看下
                                    Restful服务端是现在最流行的WebService。目前用的最多的就是tomcat。Qt是一款非常优秀的框架,本节课程使用Qt框架实现Restful风格的webservice。并且应用加载ssl后,服务的安全性得到提升。本视频教程全程干货,以程序员的视角、网络分析师的视角看问题。并且提供,如何将多线程的应用提升为高并发、多线程的思路。
                                    Qt http同步请求测试(restfull中常用的get/post/put/delete、文件上传/下载) 示例源码
https://blog.csdn.net/aggs1990/article/details/124104548
CSDN审核可能较慢,如无法下载,可以过段时间再回来看下
                                    #include "QtTestRestFulDemo.h"
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtCore/QJsonObject>
#include <QtCore/QJsonDocument>
QtTestRes...
                                    1.带领您深入学习QT5/C++HTTP基础理论、GET抓取网页、POST提价数据、JSON解析、文本浏览器、图片浏览器,逐步提升Qt编程水平。2.所有章节均有理论知识介绍、接口讲解、实例代码讲解,讲解过程中不断穿插老师在开发过程中遇到的问题及解决方法(可以下载所有的电子课件与源码)。3.本阶段主要完成Qt高阶段的HTTP编程:所有章节均配备实战项目、边理论边实战    1. HTTP基础理论HTTP协议简介HTTP请求流程图HTTP协议概述HTTP工作原理基于 请求-响应 的模式无状态保存无连接HTTP请求方法HTTP状态码URLHTTP请求格式(请求协议)HTTP响应格式(响应协议)HTTP请求正文HTTPS协议简介HTTPS握手过程win10x64安装OpenSSL:不用编译源码什么是OpenSSLOPENSSL“心脏出血”漏洞Nginx作为HTTP服务器Tomcat作为HTTP服务器一、JDK环境变量配置二、Tomcat环境变量配置三、eclipse配置四、创建JSP项目2. Qt实现HTTP编程入门QNetworkAccessManager新建项目新建类配置文件添加network头文件CPP文件3. Qt实现HTTP的GET抓取网页头文件库文件Get4. Qt实现HTTP的GET/POST提交数据5. Qt处理HTTP的JSON解析jsp返回json格式的数据Qt处理jsp返回的Json数据6. Qt实现HTTP文本浏览器7. Qt实现HTTP文件下载器8. Qt实现HTTP图片浏览器9. Qt实现HTTP服务器  
                                    在 Java 以及其他语言中,处理与后端的 HTTP 通讯,有专门的工具库,使用起来特别方便。比如使用 Java 中的 Retrifit/OkHttp,只需要声明一下服务 API 接口,就可以基于它与后端通信了。而且 OkHttp 提供了拦截器模式,可以支持自定义策略模式。这些功能能不能在 Qt/C++ 里面实现呢?
public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo&g...
                                    下面将通过这篇文章说明xengine 如何开发http服务,通过此文章 你将学会如何开发一套自己的restful api服务器.而不用第三方服务
下面的演示是基于C C++的版本.你甚至可以用这个库开发一个简单的http服务器
首先,我们需要启动一个Http服务器,下面的代码演示了如何启动一个网络服务器和一个http服务
int main()
	WSADATA st_WSAData;
	WSAStartup(MAKEWORD(2, 2), &st_WSAData);
	LPCTSTR 
                                    (1)QUdpSocket接收数据进入槽后,要用这种方式读取,否则可能会导致不发readyRead()信号 。while(udpSocket->bytesAvailable()){udpSocket->readDatagram(ch,size);}(2)QTcpSocket删除一定要用deleteLater一定要用deleteLater一定要用deleteLater否则会导致用户对象溢...