Qt Demo Http 解析网址 Openssl

来源:互联网 发布:图的深度优先遍历算法 编辑:程序博客网 时间:2024/06/01 10:48

今天练习了一下Qt 解析http协议,在Demo中使用到了Openssl


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

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

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

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

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

软件截图



详细代码


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

pro工程文件

#-------------------------------------------------## Project created by QtCreator 2016-12-27T09:16:58##-------------------------------------------------QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgets networkTARGET = http_ProjectTEMPLATE = appSOURCES += main.cpp\        widget.cppHEADERS  += widget.hFORMS    += widget.uiRC_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_OBJECTpublic:    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);}




1 0
原创粉丝点击