天天看點

Qt Demo Http 解析網址 Openssl

一上午的時間都是編譯openssl,不過還是沒有成功,很遺憾,這裡整理了有關這個Demo的本件

Qt Demo Http 解析網址 Openssl

網盤連接配接:見下方評論吧,長傳太慢了

不過雖然沒有編譯通過openssl。不過也不影響使用,可以直接下載下傳現成的openssl庫進行開發,隻需要安裝,并且把檔案拷貝值Qt目錄的bin檔案夾下面即可

下載下傳位址:

http://slproweb.com/products/Win32OpenSSL.html

剩下的就是按照網上的教程,一步一步的來編寫代碼

軟體截圖

Qt Demo Http 解析網址 Openssl

詳細代碼

這裡需要在工程檔案中加入網絡子產品

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);
}      
Qt Demo Http 解析網址 Openssl

繼續閱讀