Qt Demo Http 解析网址 Openssl

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 今天练习了一下Qt 解析http协议,在Demo中使用到了Openssl

一上午的时间都是编译openssl,不过还是没有成功,很遗憾,这里整理了有关这个Demo的本件


image.png

网盘连接:见下方评论吧,长传太慢了


不过虽然没有编译通过openssl。不过也不影响使用,可以直接下载现成的openssl库进行开发,只需要安装,并且把文件拷贝值Qt目录的bin文件夹下面即可


下载地址:http://slproweb.com/products/Win32OpenSSL.html


剩下的就是按照网上的教程,一步一步的来编写代码


软件截图

image.png

详细代码

 

这里需要在工程文件中加入网络模块

pro工程文件

 

#-------------------------------------------------
#
# Project created by QtCreator 2016-12-27T09:16:58
#
#-------------------------------------------------
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets network
TARGET = http_Project
TEMPLATE = app
SOURCES += main.cpp\
        widget.cpp
HEADERS  += widget.h
FORMS    += widget.ui
RC_FILE = ./source/Logo/http_icon.rc

头文件

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>
#include <QTimer>
#include <QString>
#include <QByteArray>
#include <QTextCodec>
#include <QMessageBox>
#include <QUrl>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    bool sendRequest(const QString& strUrl);
private slots:
    void slot_requestFinished();
    void slot_requestTimeout();
    void on_pushButton_clicked();
signals:
    void signal_requestFinished(bool bSuccess,const QString& strResult);
private:
    Ui::Widget *ui;
    QString m_serUrl;
    QNetworkAccessManager* m_pNetworkManager;
    QNetworkReply* m_pNetworkReply;
    QTimer* m_pTimer;
};
#endif // WIDGET_H

cpp文件

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
const int nHTTP_TIME = 10000;
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowTitle("Http Demo");            //set window title
    ui->lineEdit_address->setToolTip("please input the address");
    ui->lineEdit_address->setPlaceholderText("please input the address");
    m_pNetworkManager = new QNetworkAccessManager(this);
    m_pNetworkReply = NULL;
    m_pTimer = new QTimer;
    connect(m_pTimer,SIGNAL(timeout()),this,SLOT(slot_requestTimeout()));
}
Widget::~Widget()
{
    m_pTimer->stop();
    delete ui;
}
bool Widget::sendRequest(const QString &strUrl)
{
    m_serUrl = strUrl;
    QNetworkRequest netRequest;
    netRequest.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-from-urlencoded");
    netRequest.setUrl(QUrl(strUrl));
    if(strUrl.toLower().startsWith("https"))
    {
        QSslConfiguration sslConfig;
        sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
        sslConfig.setProtocol(QSsl::TlsV1_1);
        netRequest.setSslConfiguration(sslConfig);
    }
    m_pNetworkReply = m_pNetworkManager->get(netRequest);
    connect(m_pNetworkReply,SIGNAL(finished()),this,SLOT(slot_requestFinished()));
    m_pTimer->start(nHTTP_TIME);
    qDebug()<<"sendRequest";
    return true;
}
void Widget::slot_requestFinished()
{
    m_pTimer->stop();
    QByteArray resultContent = m_pNetworkReply->readAll();
    QTextCodec* pCodec = QTextCodec::codecForName("UTF-8");
    QString strResult = pCodec->toUnicode(resultContent);
    int nHttpCode = m_pNetworkReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    qDebug()<<"mHttpCode"<<nHttpCode;
    if(nHttpCode == 200)
    {
        ui->textEdit_result->setText(strResult);
        emit signal_requestFinished(true,strResult);
    }
    else
    {
        emit signal_requestFinished(false,strResult);
    }
    m_pNetworkReply->deleteLater();
//    this->deleteLater();
    qDebug()<<"requestFinish";
}
void Widget::slot_requestTimeout()
{
    emit signal_requestFinished(false ,"timeout");
    QMessageBox::warning(this,"Waring","Request False");
    m_pNetworkReply->deleteLater();
//    this->deleteLater();
}
void Widget::on_pushButton_clicked()
{
    QString str = ui->lineEdit_address->text().trimmed();
    sendRequest(str);
}



image.png

目录
相关文章
|
8天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
38 3
|
27天前
|
弹性计算 安全 API
HTTP 405 Method Not Allowed:解析与解决
本文详细解析了HTTP 405 &quot;Method Not Allowed&quot; 错误,包括其定义、常见原因、示例代码及解决方案。通过检查API文档、修改请求方法或更新服务器配置,可有效解决此错误,提升Web开发效率。
|
1月前
url重写重定向所有http网址到https网址
url重写重定向所有http网址到https网址
35 4
http数据包抓包解析
http数据包抓包解析
|
1月前
|
缓存 前端开发 安全
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
114 0
|
2月前
|
前端开发 JavaScript 安全
深入解析 http 协议
HTTP(超文本传输协议)不仅用于传输文本,还支持图片、音频和视频等多种类型的数据。当前广泛使用的版本为 HTTP/1.1。HTTPS 可视为 HTTP 的安全增强版,主要区别在于添加了加密层。HTTP 请求和响应均遵循固定格式,包括请求行/状态行、请求/响应头、空行及消息主体。URL(统一资源定位符)用于标识网络上的资源,其格式包含协议、域名、路径等信息。此外,HTTP 报头提供了附加信息,帮助客户端和服务端更好地处理请求与响应。状态码则用于指示请求结果,如 200 表示成功,404 表示未找到,500 表示服务器内部错误等。
62 0
深入解析 http 协议
http数据包抓包解析课程笔记
http数据包抓包解析课程笔记
|
1月前
|
JSON API 开发者
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
17 0
|
1月前
|
移动开发 网络协议 C语言
详解 httptools 模块,一个 HTTP 解析器
详解 httptools 模块,一个 HTTP 解析器
28 0
|
2月前
自己动手写QT多线程demo
本文是作者关于如何编写Qt多线程demo的教程,介绍了如何实现多线程功能,包括可暂停和继续的功能。文章提供了部分示例代码,展示了如何创建线程类、启动和管理线程,以及线程间的通信。同时,还提供了相关参考资料和免费下载链接。

热门文章

最新文章

推荐镜像

更多
下一篇
无影云桌面