今天练习了一下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 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的更多相关文章

  1. js解析网址获取需要的数据

    /** * 获取地址栏内容,返回pathnamearrneed对象 * @param {Object} len 从第几位开始获取你需要的值 */ function myLocationId(len) ...

  2. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  3. QT源码解析(七)Qt创建窗体的过程,作者“ tingsking18 ”(真正的创建QPushButton是在show()方法中,show()方法又调用了setVisible方法)

    前言:分析Qt的代码也有一段时间了,以前在进行QT源码解析的时候总是使用ue,一个函数名在QTDIR/src目录下反复的查找,然后分析函数之间的调用关系,效率实在是太低了,最近总结出一个更简便的方法, ...

  4. 虹软人脸识别——官方 Qt Demo 移植到 Linux

    一.前言 最近需要在 Linux 平台下开发一个人脸识别相关的应用,用到了虹软的人脸识别 SDK.之前在 Windows 平台用过,感觉不错,SDK 里面还带了 Demo 可以快速看到效果.打开 Li ...

  5. QT学习:c++解析html相关

    原来我做爬虫的时候,对页面进行解析的时候总是用很简单粗暴的方法,直接找规律.后来在网上看到了gumbo,尝试了一下,发现确实很好用,所以向大家推荐一下. 以下转自:http://blog.csdn.n ...

  6. qt和makefile学习网址

    http://blog.51cto.com/zt/20/1/   ---qt学习网站 http://www.chinaunix.net/old_jh/23/408225.html  [精华] 跟我一起 ...

  7. QT源码解析笔记

    1. QT如何绘制控件的 QT的绘制控件在QStyleSheetStyle::DrawControl里面,这里会调用默认的QSS来绘制效果 2. 在设置一次QSS以后,将会触发polish事件,里面将 ...

  8. 绝对好用的浏览器json解析网址

    你们是否经常在浏览器输入请求地址解析遇到中文乱码的情况,今天我找到了一个好用的浏览器解析json网址,绝对好用. 1.直接输入网址 http://pro.jsonlint.com/ 2.输入要解析的j ...

  9. Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

    When compiling Qt you can choose one of these options based on the configure command line: no OpenSS ...

随机推荐

  1. 【luogu P2298 Mzc和男家丁的游戏】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2298 对于迷宫问题,bfs是比较好的选择. 直接bfs模板 #include <iostream> ...

  2. Tomcat 服务器体系结构

    connector 监听端口,监听到以后,交给 Engine 引擎 处理,引擎会根据请求找到对应的主机,找到主机后再去找对应的应用. 如果我们将 port 改为 80,那访问的时候就不用输入端口号,因 ...

  3. java基础(杂记)

    java基础夯实(杂记):1:创建实例对象可以通过无参的构造函数然后调用成员变量去初始化属性,也可以自己定义有参构造方法直接初始化属性,当属性为private时我们可以通过getset方法间接访问:2 ...

  4. redis的安装和启动linux环境

    启动客户端连接redis服务,redis-cli -p(端口) -h(登录的服务的ip地址);不添加任何参数和选项直接使用redis-cli将会默认登录6379,默认使用ip 127.0.0.1#re ...

  5. mysql 复制A表 到B表;insert into select * from table

    情况一: INSERT INTO tb1 (a,b,c) select a1,b1,c1, from tb2 where .... --  案例 百度云 INSERT INTO l_biz_car_o ...

  6. oracle net manager 数据传输安全

    oracle net manager来加密客户端与数据库之间或中间件与 数据库之间的网络传输数据 第一步:开始-->所有程序 -->oracle --> 配置和移植工具 --> ...

  7. jquery获取父级元素、子级元素、兄弟元素

    1:$(this).parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent ...

  8. C/C++使用Socket通信UDP

    接收端 #include <stdio.h> #include <WinSock2.h> #pragma comment(lib,"WS2_32.lib") ...

  9. 配置django控制台输出ORM转化的sql

    在setting中配置 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ ' ...

  10. (第04节)集成SpringMVC框架

    在上一节的基础上集成spring_mvc 首先添加依赖文件 <properties> <javax.servlet.version>4.0.0</javax.servle ...