Qt Demo Http 解析网址 Openssl

简介: 今天练习了一下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

目录
相关文章
|
2月前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
85 0
|
2月前
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
226 0
|
2月前
|
存储 开发框架 开发者
QT C++焦点事件:多角度解析实用技巧与方法
QT C++焦点事件:多角度解析实用技巧与方法
281 0
|
2月前
|
Linux iOS开发 UED
探索Qt折线图之美:一次详尽的多角度解析
探索Qt折线图之美:一次详尽的多角度解析
179 0
|
2月前
|
存储 搜索推荐 人机交互
Qt鼠标事件全面解析:从基础到实战
Qt鼠标事件全面解析:从基础到实战
143 0
|
2月前
|
算法 Unix Linux
Linux与Qt线程优先级的对应关系:一次全面解析
Linux与Qt线程优先级的对应关系:一次全面解析
26 0
|
2月前
|
缓存 网络协议 安全
阿里云DNS常见问题之新疆地区无法访问网址如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
1月前
|
编译器 C语言
Qt使用MSVC编译错误: LNK2019: 无法解析的外部符号
Qt使用MSVC编译错误: LNK2019: 无法解析的外部符号
21 1
|
2月前
|
安全 数据安全/隐私保护
深入解析:HTTP和HTTPS的三次握手与四次挥手
在这些握手和挥手过程中,双方交换信息,协商参数,建立或关闭连接,以保证数据的可靠传输。HTTPS在此基础上加入了数字证书验证和加密通信,增加了安全性。这些步骤确保了HTTP和HTTPS协议的通信过程的稳定和安全。
120 0
|
2月前
|
Java 程序员 API
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
83 0

推荐镜像

更多