Qt Demo Http 解析网址 Openssl
今天练习了一下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的更多相关文章
- js解析网址获取需要的数据
/** * 获取地址栏内容,返回pathnamearrneed对象 * @param {Object} len 从第几位开始获取你需要的值 */ function myLocationId(len) ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
- QT源码解析(七)Qt创建窗体的过程,作者“ tingsking18 ”(真正的创建QPushButton是在show()方法中,show()方法又调用了setVisible方法)
前言:分析Qt的代码也有一段时间了,以前在进行QT源码解析的时候总是使用ue,一个函数名在QTDIR/src目录下反复的查找,然后分析函数之间的调用关系,效率实在是太低了,最近总结出一个更简便的方法, ...
- 虹软人脸识别——官方 Qt Demo 移植到 Linux
一.前言 最近需要在 Linux 平台下开发一个人脸识别相关的应用,用到了虹软的人脸识别 SDK.之前在 Windows 平台用过,感觉不错,SDK 里面还带了 Demo 可以快速看到效果.打开 Li ...
- QT学习:c++解析html相关
原来我做爬虫的时候,对页面进行解析的时候总是用很简单粗暴的方法,直接找规律.后来在网上看到了gumbo,尝试了一下,发现确实很好用,所以向大家推荐一下. 以下转自:http://blog.csdn.n ...
- qt和makefile学习网址
http://blog.51cto.com/zt/20/1/ ---qt学习网站 http://www.chinaunix.net/old_jh/23/408225.html [精华] 跟我一起 ...
- QT源码解析笔记
1. QT如何绘制控件的 QT的绘制控件在QStyleSheetStyle::DrawControl里面,这里会调用默认的QSS来绘制效果 2. 在设置一次QSS以后,将会触发polish事件,里面将 ...
- 绝对好用的浏览器json解析网址
你们是否经常在浏览器输入请求地址解析遇到中文乱码的情况,今天我找到了一个好用的浏览器解析json网址,绝对好用. 1.直接输入网址 http://pro.jsonlint.com/ 2.输入要解析的j ...
- Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)
When compiling Qt you can choose one of these options based on the configure command line: no OpenSS ...
随机推荐
- 随便扯扯React生命周期 --《爱看不看系列》
生命周期嘛,顾名思义,就是说组件这辈子从生下来到死掉经历的事情.先来看看一张图片,温故温故,如图: 你会发现有些周期的名字都能找出点规律,我找到的规律是凡是 Will 字母的,表示该钩子函数会在该生命 ...
- vue---组件引入及使用的几种方式
在vue的项目开发过程中,基本都是基于组件化开发项目,总结下使用组件的几个点: 一.@符号的使用 在vue项目中 @ 符号代表的是根目录,即 src 目录. 二.组件的放置位置 在项目中,公用的组件放 ...
- 剑指offer——27. 二叉搜索树与双向链表(Java版)
题目: 剑指offer的题目有挺多都挺典型的,就像这一道.不过书中的代码写的真是ugly,有很多题目LeetCode上都有,可以去LeetCode讨论区看看,经常有一些大神分享,写的代码真是高效.简洁 ...
- ng-repeat 指令(带有数组)
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- oracle 的分页查询与mysql 的分页查询
oracle 的分页查询: select * from (select o.*,rownum rn from Persons o) where rn >40 and rn <=60 : ...
- eventlet详解
正真工作才发现很懒,没这么多时间写文,毕竟小白,参照大神写的,不喜勿喷 1.eventlet是什么eventlet - 具有WSGI支持的异步框架eventlet是python库函数,一个是处理和网络 ...
- Linux入门-第六周
1.总结IP地址规划 IP地址的合理规划是网络设计中最重要的一环,在大型网络中必须对IP地址进行统一规划并得到实施.IP地址规划的好坏影响到网络路由协议算法的效率,影响到网络的性能,影响到网络的拓展, ...
- Ajax之eval()函数
Ajax之eval()函数 <!DOCTYPE html> <html> <head lang="en"> <meta charset=& ...
- Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO
你有碰上过这样的提示吗? Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in t ...
- dos命令操作数据库(上)
1.cd到mysql安装目录bin目录: 2.输入id.用户名和密码: 3.查看数据库实例: 4.创建一个实例: 5.删除一个实例: 6.创建一个表: 7.删除一个表: 8.表结构: 9.修改表: 你 ...