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

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

  1. QT之Http请求

    今天我们介绍一下QT的http请求,这里有post和get两种方式 一.post请求方式:参数分为网址和具体请求值两个部分,有时候还需要设置头信息,看具体情况定 void MainWindow::se ...

  2. 使用Qt发送HTTPS请求

    示例代码: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QNetworkAc ...

  3. nginx截获客户端请求

    使用nginx可以直接截获客户端请求,以下是最近收集的一些判断截获的信息的配置,为查看方便记录如下: 1.根据UA和cookie判断当前是移动端还是PC端访问: if ($http_host !~ & ...

  4. 用qt creator创建可继承ui类

    https://jingyan.baidu.com/article/5d368d1efa2dd73f60c05786.html 用qt creator创建可继承ui类 听语音 | 浏览:1657 | ...

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

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

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

    效果 QNetworkAccessManager DownloadNetworkManager::DownloadNetworkManager(QObject *parent) : QNetworkA ...

  7. Qt发送HTTP请求

    http://hi.baidu.com/cmdmac/item/c45b9f0fb0d0938802ce1bbd 最近在搞QT跟服务器交互的东西,自然少不了发送和接受HTTP请求.在网上找了一些资料知 ...

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

    以VS开发为例.因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com ...

  9. QT https post请求(QNetworkRequest要设置SSL证书,而SSL证书认证有三种)

    因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com/product ...

随机推荐

  1. Java与C#的语法区别

    1.作用域 在java中 { { int a=1; } int a=2;//以上a作用域外的以下,再声明同名的变量,是允许的: } 在C#中,以上是不允许的[只要在同一个作用域内,以上或以下的代码中 ...

  2. 你的服务器没有正确响应Token验证的解决方法

    你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token作者:http://txw1958.cnblogs.com/ 原文: ...

  3. instsrv.exe用法

    这个小工具是用以安装和卸载可执行的服务和指派服务名给这些可执行的服务的.     一:绑定程序和服务 这里我们设定要将F:\cpu.exe 以 abc 的名称显示作为服务的话,我们应当这样子做: 在开 ...

  4. Session Redis Nginx

    Session + Redis + Nginx 一.Session 1.Session 介绍 我相信,搞Web开发的对Session一定再熟悉不过了,所以我就简单的介绍一下. Session:在计算机 ...

  5. sql 连接查询

    什么是连接查询呢 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据. 目的:实现多个表查询操作. 分类 首先划分一下,连接分为三种:内连接.外连接.交叉连接 内连接(INNER JOIN): ...

  6. ListView与GridView优化

    前言 ListView是Android中最常用的控件,通过适配器来进行数据适配然后显示出来,而其性能是个很值得研究的话题.本文与你一起探讨Google I/O提供的优化Adapter方案,欢迎大家交流 ...

  7. IE8支持function.bind()方法

    这个 bind 方法仅仅有在 ie10 版本号的浏览器才得到原生支持,低于该版本号的浏览器下运行时会得到一个 undefined 的错误提示.于是仅仅好再次上网 google 解决方式,功夫不负有心人 ...

  8. CentOS 由 JavaCPP 转让 FFMPEG

    1. Java 与 FFMPEG FFMPEG 它是一种广泛使用的媒体处理库,于Java天地,处理视频较弱的能力,因此,有非常大的需求需求Java 转让 FFMPEG. Java 转让C 的方式有非常 ...

  9. 图灵机(Turing Machine)

    图灵机,又称图灵计算.图灵计算机,是由数学家阿兰·麦席森·图灵(1912-1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人们进行数学运算. 所谓的图 ...

  10. Win32 Windows计划 十一年

    一个.使用位图 1 位图 - 由图像上的各点的颜色被保存,生成对应的位图文件 栅格 - 保存图像可以理解为晶格 矢量图 - 能够理解为画图命令的保存 2 位图的使用 2.1 载入位图 LoadBitm ...