当前位置: 首页 > news >正文

ftp如何修改网站备案号简述新企业的注册流程

ftp如何修改网站备案号,简述新企业的注册流程,网站建设中数据库,网站logo图标QT5实现https的post请求 前言一、一定要有sslErrors处理1、问题经过2、代码示例 二、要利用抓包工具1、问题经过2、wireshark的使用3、利用wireshark查看服务器地址4、利用wireshark查看自己构建的请求报文 三、返回数据只能读一次1、问题描述2、部分代码 总结 前言 QNetworkA… QT5实现https的post请求 前言一、一定要有sslErrors处理1、问题经过2、代码示例 二、要利用抓包工具1、问题经过2、wireshark的使用3、利用wireshark查看服务器地址4、利用wireshark查看自己构建的请求报文 三、返回数据只能读一次1、问题描述2、部分代码 总结 前言 QNetworkAccessManager、QNetworkRequest和QNetworkReply是QT5网络编程的API三者共同完成HTTP或者HTTPS协议的通信。初学者往往会程序编译没有问题但是运行代码没有任何结果于是不知道问题出在哪里。此时要借助postman、wireshark等工具的帮助。 本文按照问题出现的顺序总结QT5的网络编程方法。 一、一定要有sslErrors处理 1、问题经过 我们知道客户端发送HTTPS的post请求需要手动构建请求报文的请求行、请求头部和请求体。一开始的时候着急利用QNetworkRequest来实现构建请求报文(request)但是程序运行始终没有输出数据以为是构建报文的格式不正确。于是简化构建get报文程序运行依然没有输出数据。后来参考官网Example、Gitee、CSDN的代码加入了sslErrors槽函数程序终于有了反应。在利用QNetworkAccessManager::connectToHostEncrypted时提示错误qt.network.ssl: QSslSocket: cannot resolve EVP_PKEY_base_id。 这是HTTPS请求错误原因在于本地OpenSSL版本与Qt支持的不匹配。通过检查、下载、编译和配置OpenSSL源代码解决了这个问题。具体方法可以参考博文 《(Linux)解决运行Qt程序时报错》亲测有效。 如果不加sslErrors槽函数那永远不知道是OpenSSL的问题还傻傻地以为是报文格式、post方法不对。 参考资料QNetworkReply Class | Qt Network 5.15.17 2、代码示例 httpspost.h部分代码如下 class HttpsPost : public QObject {Q_OBJECTQNetworkAccessManager m_networkAccessManager;public:HttpsPost();void doPost();~HttpsPost();private://发送data数据QByteArray m_sendJsonData;QVariant data;public slots:void sslErrors(const QListQSslError errors);void postReadyRead(QNetworkReply *reply); }httpspost.cpp部分代码如下 #include QtCore #include QtNetwork #include QSslConfiguration #include QNetworkReply #include QJsonObject #include QJsonDocument #include QJsonArray #include QDebug #include QVector#include httpspost.hHttpsPost::HttpsPost() {connect(m_networkAccessManager, QNetworkAccessManager::finished, this, HttpsPost::postReadyRead);#if QT_CONFIG(ssl)connect(reply, QNetworkReply::sslErrors,this, HttpsPost::sslErrors); #endif }void HttpsPost::sslErrors(const QListQSslError sslErrors) { #ifndef QT_NO_SSLforeach(const QSslError error, sslErrors)qDebug() SSL error: error.errorString();#elseQ_UNUSED(sslErrors); #endif }QNetworkReply类有信号对象(signals)sslErrors。这个信号可以用来发射、显示错误消息。从而利用自己编写的槽函数HttpsPost::sslErrors来显示、错误处理。 二、要利用抓包工具 1、问题经过 编译、安装了OpenSSL之后程序运行仍然没有数据输出。此时考虑到底有没有连接Web服务器是否发送了post请求所以想到利用网络抓包工具。我用的是wireshark抓包工具很好用360软件管家就有安全有保障。 2、wireshark的使用 安装好wireshark工具之后首先用postman发送get、post请求看看正确的通信过程是怎样的。 ①处添加过滤器只看本机和Web服务器IP地址的包。 ②处可以看到发送了post请求点击可以查看请求报文内容。 ③处查看请求报文的格式和内容。根据这个可以比对自己构建的请求报文是否正确。 ④处可以看到协议版本是TLSV1.2。 3、利用wireshark查看服务器地址 服务器的地址可以通过QNetworkRequest类的构造函数来设置。例如 QNetworkRequest m_httpRequest(QUrl(http://www.wangsansan.com/test/HttpsPostTest.php));有2个问题需要注意 QUrl地址中http与https的连接过程、传输协议、端口都是不一样的。https服务器地址不能用IP地址QUrl(“https://115.28.242.169 /test/HttpsPostTest.php”)否则会报错 SSL error: The host name did not match any of the valid hosts for this certificate。 http服务器则可以用计算机名也可以用IP地址。 参考资料QNetworkRequest Class | Qt Network 5.15.17 4、利用wireshark查看自己构建的请求报文 构建请求报文要用到QNetworkRequest类。刚开始的时候不知道使用setHeader和setRawHeader的效果。利用wireshark就可以查看了。例如QNetworkRequest::m_httpRequest.setHeader(QNetworkRequest::LocationHeader, QByteArray(/test/HttpsPostTest.php));的结果如下图所示 部分代码如下 void HttpsPost::doPost() {QJsonDocument doc;QJsonObject jsonObjData;jsonObjData.insert(A, 111); // 设置内容字段jsonObjData.insert(B, 222); doc.setObject(jsonObjData);QString str QString(doc.toJson());QByteArray content str.toUtf8();int contentLength content.length();//QSslConfiguration是QNetworkRequest的访问设置类用于设置协议类型支持httpsQSslConfiguration config;config.setPeerVerifyMode(QSslSocket::VerifyNone);config.setProtocol(QSsl::TlsV1_2); //构建QNetworkRequest对象设置urlQNetworkRequest m_httpRequest(QUrl(http://www.wangsansan.com/test/HttpsPostTest.php));//构建post请求报文// m_httpRequest.setHeader(QNetworkRequest::LocationHeader, QByteArray(/test/HttpsPostTest.php));m_httpRequest.setHeader(QNetworkRequest::ContentTypeHeader, QByteArray(application/json; charsetutf-8));m_httpRequest.setRawHeader(Connection, QByteArray(keep-alive));m_httpRequest.setHeader(QNetworkRequest::ContentLengthHeader, doc.toJson().size());//m_sendJsonData.length()reply m_networkAccessManager.post(m_httpRequest, doc.toJson());//返回数据QNetworkReply *reply m_networkAccessManager.get(m_httpRequest);三、返回数据只能读一次 1、问题描述 到这里向服务器发送post请求已经没有问题了。但是运行程序仍然无法获取数据。问题应该出在获取返回数据上。刚开始时复制了官网上的代码问题依然存在。Gitee、CSDN上的代码写法也各不相同。后来看了官网的参考文档才知道返回数据只能在返回数据结束之后读一次。 1.The QNetworkReply class contains the data and meta data related to a request posted with QNetworkAccessManager. 2.QNetworkReply is a sequential-access QIODevice, which means that once data is read from the object, it is no longer kept by the device. QNetworkAccessManager::finished()和QNetworkReply::finished()都可以发送返回数据结束的信号(signal)。然后用槽函数来获取数据。您还可以使用QNetworkReply::isFinished()来检查QNetworkReply是否已完成。 参考文档 QNetworkAccessManager Class | Qt Network 5.15.17 QNetworkReply Class | Qt Network 5.15.17 2、部分代码 httpspost.h如上文httpspost.cpp部分代码如下 HttpsPost::HttpsPost() {connect(m_networkAccessManager, QNetworkAccessManager::finished, this, HttpsPost::postReadyRead);#if QT_CONFIG(ssl)connect(reply, QNetworkReply::sslErrors,this, HttpsPost::sslErrors); #endif }void HttpsPost::postReadyRead(QNetworkReply *reply) {qDebug() reply data: QString::fromUtf8(reply-readAll()); }运行结果举例 reply data: {\error_code\:111,\error_msg\:\Access token expired\}总结 至此QT5利用QNetworkAccessManager、QNetworkRequest和QNetworkReply三个类可以实现https的post请求。但是还有问题需要改进 返回数据的处理post请求报文中的正文部分其格式、内容、字节长度等还需要验证。Jason数据的嵌套还需要实现。
http://www.dnsts.com.cn/news/105448.html

相关文章:

  • 做家教中介网站赚钱吗淮安建筑信息平台
  • 宁波海曙建设局网站用别人的照片做网站
  • 凡客网站目录优化四会市住房和城乡建设局网站
  • 查降权网站哪些网站可以做店淘客
  • 网站空间ip用手机制作图片的app
  • 自己网站建设容易吗注册代理公司需要什么条件
  • 政务信息网站建设方案购物网名
  • 成都企业模板建站长沙网络公司营销推广
  • 官方网站下载安装qq免费个人网站源码
  • 网站怎样做才会被百度收录安阳区号查询
  • 金融网站建设银行wordpress设置vip用户可见
  • 婚纱摄影网站建设微信公众号做电影网站
  • 龙信建设集团网站个人备案之后用于商城网站
  • 代理网站备案收钱网站开发的步骤实训内容
  • 网站制作案例如何网站建设人员的组织
  • 上海哪家公司可以做网站广州10大网站开发
  • 怎么做淘客推广网站seo推广优化多少钱
  • 关闭网站后弹窗代码最好的手机资源网站
  • 宝塔做两个网站专门做毕设的网站
  • 大学生网站设计作品网站怎么做切换图片
  • 个人可以做建站网站么怎么做符合seo的网站
  • 对中国建设银行网站的优点个人网站企业备案区别
  • 建设银行网站用什么字体跨境电商选品的策略和方法
  • 霸州建网站滨州医学院做计算机作业的网站
  • 如何搭建一个网站WordPress网站自媒体模板
  • 怎样在网上注册免费的网站企业代码查询入口
  • 公网ip做网站访问不房屋装修设计app
  • wordpress新建网站后台无法登陆品牌推广方案
  • 大良营销网站建设新闻淮阳网站建设
  • 企业免费网站制作西安软件制作