QNetworkAccessManager
【1】头文件
想要利用QNetworkAccessManager类,必须在pro文件中添加对应库network,如下:
QT += network
如果利用的VS + QT开发环境,请参考随笔《Qt添加QtNetwork库文件》
【2】示例文件
文件1:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QtNetWork> namespace Ui
{
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); private:
void get(QUrl u); private slots:
void on_pushButton_clicked();
void finished(); private:
Ui::MainWindow *ui; QUrl m_url;
QString m_htmlText;
QNetworkReply *m_pReply;
QNetworkAccessManager m_manager;
}; #endif // MAINWINDOW_H
文件2:
#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
m_pReply(Q_NULLPTR)
{
ui->setupUi(this);
} MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::get(QUrl u)
{
m_url = u; if (m_pReply != Q_NULLPTR)
{ // 更改reply指向位置前一定要保证之前的定义了自动delete
m_pReply->deleteLater();
} QNetworkRequest request;
request.setUrl(m_url);
m_pReply = m_manager.get(request);
qDebug() << "start get";
connect(m_pReply, &QNetworkReply::finished, this, &MainWindow::finished);
} void MainWindow::finished()
{
QByteArray bytes = m_pReply->readAll(); m_pReply->deleteLater();
m_pReply = Q_NULLPTR; const QVariant redirectionTarget = m_pReply->attribute(QNetworkRequest::RedirectionTargetAttribute);
if (!redirectionTarget.isNull())
{ //如果网址跳转重新请求
const QUrl redirectedUrl = m_url.resolved(redirectionTarget.toUrl());
qDebug() << "redirectedUrl:" << redirectedUrl.url();
get(redirectedUrl);
return;
} qDebug() << "finished";
m_htmlText = bytes;
qDebug() << "get ready,read size:" << m_htmlText.size(); // 写入文件
QFile f("result.html");
f.open(QFile::WriteOnly);
f.write(bytes);
} void MainWindow::on_pushButton_clicked()
{
m_htmlText = "";
get(QUrl("http://www.baidu.com/"));
}
返回的结果文件:
在运行目录中查找result.html文件,双击运行,然后与百度首页作对比,可以发现get获取的数据中不包含图片信息。
【3】总结
示例程序很简单,主要应用QNetworkAccessManager类的get接口。
Good Good Study, Day Day Up.
顺序 选择 循环 总结
QNetworkAccessManager的更多相关文章
- QNetworkAccessManager 实现的 ftp 上传
使用 QNetworkAccessManager 实现的 ftp 上传代码.完整可用,做个备忘. #include "mainwindow.h" #include <QDeb ...
- QNetworkAccessManager的异步与线程
Qt版本5.1.1 以HTTP操作为例 Qt中的HTTP操作都是异步的. 内部通过线程实现 创建线程的时机在QNetworkReplyHttpImplPrivate::postRequest() vo ...
- QFTP走了以后QNetworkAccessManager出现了
QNetworkAccessManager Class Header: #include <QNetworkAccessManager>qmake: QT += networ ...
- Qt之HTTP上传/下载(继承QNetworkAccessManager,包括使用了authenticationRequired认证信号)
效果 QNetworkAccessManager DownloadNetworkManager::DownloadNetworkManager(QObject *parent) : QNetworkA ...
- Qt之HTTPS登录(集成QNetworkAccessManager提前修改QSslConfiguration,然后post)
简述 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP ...
- 使用QNetworkAccessManager实现Qt的FTP下载服务
从Qt5开始,官方推荐使用QNetworkAccessManager进行Ftp和http的上传和下载操作:Qt4中使用的QtFtp模块即作为独立模块,需要自己从github上进行下载编译后使用(官方地 ...
- QNetworkAccessManager post()和get()方法
GET方式提交的数据最多只能有1024字节,而POST则没有此限制. 大文件传输用post(),小文件用get(), 第一次接触Qt的Http项目,今天看了一下Post和Get的基本使用方法,就开始尝 ...
- Qt使用QNetworkAccessManager实现Ftp操作
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt使用QNetworkAccessManager实现Ftp操作 本文地址:http: ...
- Qt使用QNetworkAccessManager实现Http操作
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt使用QNetworkAccessManager实现Http操作 本文地址:http ...
随机推荐
- Python开发【笔记】:asyncio 定时器
asyncio 定时器 实现: import asyncio class Timer: def __init__(self, timeout, callback): self._timeout = t ...
- Eclipse设置注释模板和工作空间背景色为豆沙绿
Eclipse Version: Photon Release (4.8.0). 首先上图,根据图上的步骤即可完成注释模板的设置. 1 如何设置eclipse注释模板的日期格式 在eclipse的 P ...
- 【托业】【新托业TOEIC新题型真题】学习笔记4-题库一->P7
--------------------------------------单词-------------------------------------- reimbursement n. 报销:偿 ...
- LeetCode-300.Longst Increasing Subsequence
Given an unsorted array of integers, find the length of longest increasing subsequence. Example: Inp ...
- 前端 HTML form表单标签 input标签 type属性 radio 单选框
<input type="radio"> 单选框 适用于 选择性别按钮网页等 <!DOCTYPE html> <html lang="en& ...
- 如何在Digital Ocean上申请服务器的教程
本文会详细叙述如何在digital ocean上注册.申请.创建以及配置服务器,亲测有效. what's the Digital Ocean ? 根据度娘释义,Digital Ocean是digita ...
- k皇后
http://www.cnblogs.com/drizzlecrj/archive/2007/10/04/913703.html
- Spark资源调度
一:任务调度和资源调度的区别: 任务调度是指通过DAGScheduler,TaskScheduler,SchedulerBackend完成的job的调度 资源调度是指应用程序获取资源的调度,他是通过s ...
- [py]py3/pip/virtualenv/mysql环境安装
Traceback (most recent call last):是什么意思? 追踪(最后调用) pip.ini添加 https://www.cnblogs.com/lsdb/p/9188204.h ...
- nginx的访问控制
一.基于Basic Auth认证与基于IP的访问控制 一.基于Basic Auth认证 Nginx提供HTTP的Basic Auth功能,配置了Basic Auth之后,需要输入正确的用户名和密码之后 ...