一上午的時間都是編譯openssl,不過還是沒有成功,很遺憾,這裡整理了有關這個Demo的本件
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5COxYWOlFTMmhTZ2E2Y3ITY4MWY0ATNlNzMxgDNxE2M08CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
網盤連接配接:見下方評論吧,長傳太慢了
不過雖然沒有編譯通過openssl。不過也不影響使用,可以直接下載下傳現成的openssl庫進行開發,隻需要安裝,并且把檔案拷貝值Qt目錄的bin檔案夾下面即可
下載下傳位址:
http://slproweb.com/products/Win32OpenSSL.html剩下的就是按照網上的教程,一步一步的來編寫代碼
軟體截圖
詳細代碼
這裡需要在工程檔案中加入網絡子產品
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);
}