qt截获html请求(继承QNetworkAccessManager和QNetworkReply)

QtWebkit加载html页面,html中会有很多的请求,比如<img id="testImg" src="http://*.jpg" width="200" height="200" title="test图片"/>等等,如果想截获这些请求,然后自定义应答...

1.定义一个类,继承QNetworkAccessManager(请求)

#ifndef NETWORKACCESSMANAGER_H

#define NETWORKACCESSMANAGER_H

#include <QtNetwork/QNetworkAccessManager>

#include <QtNetwork/QNetworkProxy>

#include <QtNetwork/QNetworkReply>

#include <QtNetwork/QNetworkRequest>

class NetworkAccessManager : public QNetworkAccessManager

{

Q_OBJECT

public:

explicit NetworkAccessManager(QNetworkAccessManager *manager, QObject *parent);

protected:

QNetworkReply * createRequest(QNetworkAccessManager::Operation operation,

const QNetworkRequest &request, QIODevice *device);

};

#endif // NETWORKACCESSMANAGER_H

#include "networkaccessmanager.h"

#include <QtCore/QDebug>

NetworkAccessManager::NetworkAccessManager(QNetworkAccessManager *manager, QObject *parent)

: QNetworkAccessManager(parent)

{

setCache(manager->cache());

setCookieJar(manager->cookieJar());

setProxy(manager->proxy());

setProxyFactory(manager->proxyFactory());

}

QNetworkReply * NetworkAccessManager::createRequest(QNetworkAccessManager::Operation operation,

const QNetworkRequest &request, QIODevice *device)

{

if (request.url().scheme() != "http")

return QNetworkAccessManager::createRequest(operation, request, device);

else

return new BlobReply(request.url);

}

2.定义一个类,继承QNetworkReply(应答)

#ifndef BLOBREPLY_H

#define BLOBREPLY_H

#include <QtNetwork/QNetworkReply>

class BlobReply : public QNetworkReply

{

Q_OBJECT

public:

BlobReply(const QUrl &url);

void abort();

protected:

qint64 readData(char *data, qint64 maxSize);

};

#endif // BLOBREPLY_H

#include "blobreply.h"

#include <QtCore/QDebug>

BlobReply::BlobReply(const QUrl &url)

: QNetworkReply()

{

qDebug() << url.toString();

}

void BlobReply::abort()

{

}

qint64 BlobReply::readData(char *data, qint64 maxSize)

{

return -1;

}

3.在初始化webview的时候,实例化上面的东东

QNetworkAccessManager *oldManager = ui->webView->page()->networkAccessManager();

NetworkAccessManager *newManager = new NetworkAccessManager(oldManager, this);

ui->webView->page()->setNetworkAccessManager(newManager);

ui->webView->page()->setForwardUnsupportedContent(true);

如有技术问题,请咨询博主QQ...

http://blog.sina.com.cn/s/blog_671732440100y3xx.html

时间: 2024-10-17 19:47:39

qt截获html请求(继承QNetworkAccessManager和QNetworkReply)的相关文章

Qt之HTTP上传/下载(继承QNetworkAccessManager,包括使用了authenticationRequired认证信号)

效果 QNetworkAccessManager DownloadNetworkManager::DownloadNetworkManager(QObject *parent) : QNetworkAccessManager(parent) { // 获取当前的时间戳,设置下载的临时文件名称 QDateTime dateTime = QDateTime::currentDateTime(); QString date = dateTime.toString("yyyy-MM-dd-hh-mm-s

Qt发送HTTP请求

http://hi.baidu.com/cmdmac/item/c45b9f0fb0d0938802ce1bbd 最近在搞QT跟服务器交互的东西,自然少不了发送和接受HTTP请求.在网上找了一些资料知道以前的QT版本是使用QHTTP类来处理HTTP请求的,新版本是使用QNetworkAccessManager来进行管理的. HTTP请求在QT中相应的类为QNetworkRequest,HTTP响应相应的类为QNetworkReply,下面是一个管理的发送HTTP请求并读取响应的例子://Test

QT https post请求(QNetworkRequest要设置SSL证书,而SSL证书认证有三种,实测成功)

以VS开发为例.因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com/products/Win32OpenSSL.html网页: 2.下载安装包,我下载的是:Win32 OpenSSL v1.0.1c Light安装包,随着时间的推进,这个版本会不断更新的: 3.安装(exe文件)到本地,并且在安装过程中选择将库安装到OpenSSL的安装目录(/bin)下面. 4.

Qt post http请求使用

#include "mainwindow.h" #include "ui_mainwindow.h" //#include "datadboperation.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QString strUserInfo = QString(&qu

与 QWidget 有关的 Qt 可视化组件的继承关系图

Qt自定义窗口,继承自QDialog,执行后返回rejected的问题分析

自定义了一个弹出窗口,添加了一个确定按钮,并定义了槽函数,处理结束后,调用 close(); 退出窗口,监测到返回值是Rejected十分不解,反复查看帮助文档,后来发现,使用Close()关闭窗口,本身就是拒绝窗口结果. 要调用 accept(); 来关闭窗口,返回值才会是Accepted.

Qt 之 使用 https发送 HTTP请求(使用OPENSSL库)

一.简述 在使用Qt发送HTTP请求中一般使用的链接都是http://前缀,而有的服务器支持 https://前缀的链接,而Qt本身是支持https的,但是https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在Qt中使用https需要进行SSL认证.实现非常容易,简单几步即可完成. 二.HTTPS和HTTP的区别 1.简介 超文本传输协议HTTP被用于在Web浏览器和网站服务器之间传递信息.HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网

Qt发起Http/Https请求

1. BurpSuite抓包 1.1 设置代理 burpsuite代理设置 浏览器代理设置(chrome),其他浏览器同理. 地址栏输入 chrome://settings/, 打开代理设置 设置代理端口 如果使用了代理插件,比如switchomega,可以这么设置 这样当选择使用代理选项的时候,请求包的数据也会被burpsuite拦截到. 1.2 导入证书 浏览器地址栏输入 http://burp/,如果有使用代理插件,建议先停用插件,待正确导入证书后开启使用,后续不再有影响. 点击CA Ce

QT http请求数据

1.创建一个请求类(HttpWork): HttpWork.h头文件 #pragma once #include <QObject> #include <QNetworkAccessManager> #include <QNetworkReply> #include "NetWorkCookie.h" #include <QNetworkCookie> class HttpWork : public QObject { Q_OBJECT